码迷,mamicode.com
首页 > 其他好文 > 详细

使用触摸检测滑动(左,右,上或下)

时间:2018-09-27 13:10:20      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:变量   快速   element   listen   获得   col   结束   代码   遇到   

触摸式滑动是指在特定方向上快速移动手指穿过触摸表面的行为。onswipeJavaScript中目前没有“ ”事件,这意味着我们可以使用可用的触摸事件来实现一个事件,并且只需在刷卡时定义,即“刷卡”。

让我们首先定义何时应该将触摸表面上的移动视为滑动。有在玩两个变量这里-在距离旅行了用户对x或y轴的手指touchstart来 touchend,而且,它花时间。基于这两个因素,我们可以决定该操作是否符合滑动和方向。

有了这个,让我们把想法付诸行动,看看如何检测右键(从左到右)。一旦我们能够做到这一点,检测其他3个方向的滑动几乎完全相同。在这个练习中,我们将规定,当用户提出他在触摸手指表面最低为150px发生向右滑动水平从左至右在200毫秒以内。此外,垂直移动的距离不应超过100px,以避免用户斜向滑动的“误报”,我们不希望将其视为向右滑动。

 

1

2

3

4

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

三十

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

<font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><SCRIPT></font></font><font></font>

<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

window.addEventListener(‘load‘function(){</font></font><font></font>

<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    var touchsurface = document.getElementById(‘touchsurface‘),</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        startx的,</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        startY,</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        DIST,</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        阈值= 150,//所需的最小行程距离被视为滑动</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        allowedTime = 200,//允许行进该距离的最长时间</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        elapsedTime,</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        开始时间</font></font><font></font>

<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    function handleswipe(isrightswipe){</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        if(isrightswipe)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

            touchsurface.innerHTML =‘恭喜,你已经做了<span style =“color:red”>右滑动!</ span>‘</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        其他{</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

            touchsurface.innerHTML =‘尚未满足右键滑动的条件‘</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        }</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    }</font></font><font></font>

<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    touchsurface.addEventListener(‘touchstart‘function(e){</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        touchsurface.innerHTML =‘‘</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        var touchobj = e.changedTouches [0]</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        dist = 0</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        startX = touchobj.pageX</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        startY = touchobj.pageY</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        startTime = new Date()。getTime()//记录手指首次与曲面接触时的时间</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        e.preventDefault()</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    },false)</font></font><font></font>

<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    touchsurface.addEventListener(‘touchmove‘function(e){</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        e.preventDefault()//在DIV内阻止滚动</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    },false)</font></font><font></font>

<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    touchsurface.addEventListener(‘touchend‘function(e){</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        var touchobj = e.changedTouches [0]</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        dist = touchobj.pageX  -  startX //在与表面接触时获得手指行进的总dist</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        elapsedTime = new Date()。getTime() -  startTime //经过时间</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        //检查经过的时间是否在指定范围内,水平dist行进> =阈值,垂直dist行进<= 100</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        var swiperightBol =(elapsedTime <= allowedTime && dist> = threshold && Math.abs(touchobj.pageY  -  startY)<= 100)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        handleswipe(swiperightBol)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        e.preventDefault()</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    },false)</font></font><font></font>

<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

},false//结束window.onload</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

</ SCRIPT></font></font><font></font>

<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

<div id =“touchsurface”>向我扫描</ div></font></font>

touchend,我们检查DIST从行进 touchstarttouchend在指定的阈值以上的正数(即:150),因为在向右扫动,即DIST应该总是基于所使用(与阴性对左轻扫)等式是正。同时,我们确保任何垂直横向移动都小于100px以排除对角线滑动。由于垂直运动可以在起始触点上方或下方发生,因此我们Math.abs()在获得绝对垂直dist旅行时使用,因此在将其与我们的垂直阈值100进行比较时会涵盖两种情况。

通用滑动检测功能

现在我们向右滑动,让我们创建一个更通用的功能,检测4个方向(左,右,上或下)中的任何一个方向的滑动:

1

2

3

4

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

三十

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

<font style="vertical-align: inherit;"><font style="vertical-align: inherit;">function swipedetect(el,callback){</font></font><font></font>

 <font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    var touchsurface = el,</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    swipedir,</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    startx的,</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    startY,</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    distX,</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    distY,</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    阈值= 150,//所需的最小行程距离被视为滑动</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    约束= 100,//垂直方向同时允许的最大距离</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    allowedTime = 300,//允许行进该距离的最长时间</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    elapsedTime,</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    开始时间,</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    handleswipe = callback || </font><font style="vertical-align: inherit;">函数(swipedir){}</font></font><font></font>

 <font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    touchsurface.addEventListener(‘touchstart‘function(e){</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        var touchobj = e.changedTouches [0]</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        swipedir =‘无‘</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        dist = 0</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        startX = touchobj.pageX</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        startY = touchobj.pageY</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        startTime = new Date()。getTime()//记录手指首次与曲面接触时的时间</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        e.preventDefault()</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    },false)</font></font><font></font>

 <font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    touchsurface.addEventListener(‘touchmove‘function(e){</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        e.preventDefault()//在DIV内阻止滚动</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    },false)</font></font><font></font>

 <font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    touchsurface.addEventListener(‘touchend‘function(e){</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        var touchobj = e.changedTouches [0]</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        distX = touchobj.pageX  -  startX //在接触表面时手指移动水平dist</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        distY = touchobj.pageY  -  startY //在接触表面时手指移动垂直dist</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        elapsedTime = new Date()。getTime() -  startTime //经过时间</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        if(elapsedTime <= allowedTime){//满足awipe的第一个条件</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

            if(Math.abs(distX)> = threshold && Math.abs(distY)<= restraint){//水平滑动的第二个条件遇到</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

                swipedir =(distX <0)?</font><font style="vertical-align: inherit;">‘left‘‘right‘//如果dist行进是负数,则表示左滑动</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

            }</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

            否则if(Math.abs(distY)> = threshold && Math.abs(distX)<= restraint){//垂直滑动的第二个条件遇到</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

                swipedir =(distY <0)?</font><font style="vertical-align: inherit;">‘up‘‘down‘//如果dist旅行是负面的,它表示向上滑动</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

            }</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        }</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        handleswipe(swipedir)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        e.preventDefault()</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    },false)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

}</font></font><font></font>

 <font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

//用法:</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

/ *</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

var el = document.getElementById(‘someel‘)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

swipedetect(el,function(swipedir){</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    swipedir包含“none”,“left”,“right”,“top”或“down”</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    if(swipedir ==‘left‘)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        警报(‘你刚刚向左滑!‘)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

})</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

* /</font></font>

swipedetect()接受两个参数,即将触摸事件绑定到的元素,以及在滑动发生时执行的函数。函数参数“ swipedir”告诉您刚刚使用五个可能值进行的滑动类型:“ none ”,“ left ”,“ right ”,“ top ”或“ down ”。

下面使用该swipedetect()功能显示“左”,“右”,“顶部”或“向下”背景图像(覆盖在默认背景图像的顶部),具体取决于刚刚发生的滑动:

 

使用的代码是:

1

2

3

4

6

7

8

9

10

11

12

13

14

15

<font style="vertical-align: inherit;"><font style="vertical-align: inherit;">window.addEventListener(‘load‘function(){</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    var el = document.getElementById(‘touchsurface2‘)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    var inner = document.getElementById(‘inner‘)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    var hidetimer = null</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    swipedetect(el,function(swipedir){</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        if(swipedir!=‘none‘){</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

            clearTimeout(hidetimer)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

            var bgimage = swipedir +‘arrow.png‘//命名约定是“leftarrow.png”,“rightarrow.png”等</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

            inner.style.background =‘透明网址(‘+ bgimage +‘)中心无重复‘</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

            hidetimer = setTimeout(function(){// 1秒后重置背景图像</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

                inner.style.background =‘‘</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

            },1000)</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        }</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    })</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

},false)</font></font>

HTML标记是:

1

2

3

4

<font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><div id =“touchsurface2”></font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    <div id =“inner”></font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        刷我</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    </ DIV></font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

</ DIV></font></font>

我们绑定swipedetect()到“ #touchsurface2”,每当在其中发生有效的滑动时,我们相应地更改“ #inner”DIV的背景图像以反映刚刚发生的滑动类型。

使用触摸检测滑动(左,右,上或下)

标签:变量   快速   element   listen   获得   col   结束   代码   遇到   

原文地址:https://www.cnblogs.com/xjsp/p/9712357.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!