确定touchmove的垂直方向

mad*_*ops 28 jquery touch ipad

我正在尝试为平板电脑实现触摸监听器,以触发某些操作,具体取决于它是向上还是向下移动.

我尝试了本机监听器:

($document).bind('touchmove', function (e)
{
    alert("it worked but i don't know the direction");
});
Run Code Online (Sandbox Code Playgroud)

但我不知道如何确定方向.

这可能吗?

或者我需要使用touchstart/touchend,如果我需要这个,我可以在触摸运动停止之前确定方向吗?

如果我只能使用外部库,那么最好的是什么?

谢谢.

Aur*_*uau 54

我在Ipad中遇到了一些问题并用两个事件解决了它

var ts;
$(document).bind('touchstart', function (e){
   ts = e.originalEvent.touches[0].clientY;
});

$(document).bind('touchend', function (e){
   var te = e.originalEvent.changedTouches[0].clientY;
   if(ts > te+5){
      slide_down();
   }else if(ts < te-5){
      slide_up();
   }
});
Run Code Online (Sandbox Code Playgroud)

  • 如果你想触发一些拖动或动态效果,在“touchstart”事件上添加“e.preventDefault()”可能会很有用 (2认同)

And*_*ndy 37

您需要保存触摸的最后位置,然后将其与当前位置进行比较.
粗略的例子:

var lastY;
$(document).bind('touchmove', function (e){
     var currentY = e.originalEvent.touches[0].clientY;
     if(currentY > lastY){
         // moved down
     }else if(currentY < lastY){
         // moved up
     }
     lastY = currentY;
});
Run Code Online (Sandbox Code Playgroud)


Jua*_*era 14

Aureliano的答案似乎非常准确,但不知何故它对我不起作用,所以给他学分我决定用以下方法改进他的答案:

var ts;
$(document).bind('touchstart', function(e) {
    ts = e.originalEvent.touches[0].clientY;
});

$(document).bind('touchmove', function(e) {
    var te = e.originalEvent.changedTouches[0].clientY;
    if (ts > te) {
        console.log('down');
    } else {
        console.log('up');
    }
});
Run Code Online (Sandbox Code Playgroud)

我只是改变了'touchend'事件'touchmove'

  • 这应该作为对[here](http://stackoverflow.com/a/22257774/155640)的评论,而不是单独的答案. (2认同)
  • 这就是答案。这是最好的解决方案。Aureliano 的答案的问题是你必须抬起手指才能触发 touchend。通过此解决方案,用户可以抬起手指,或者在不抬起手指的情况下继续滑动,并且它将继续像他们一样侦听并触发您的代码,从而使您的代码响应更快。 (2认同)