检查touchend是否在拖动后出现

Kon*_*son 37 javascript jquery touch touch-event ios

我有一些代码可以更改表的类.在手机上,有时桌子对于屏幕来说太宽,用户将拖动/滚动以查看内容.但是,当他们触摸并拖动桌子时,它会触发每次拖动的触发.

我如何测试看看触摸是否是由于触摸拖动而产生的?我尝试跟踪dragstart和dragend,但我无法让它工作,这似乎是一种不优雅的方法.有什么我可以添加到下面的内容基本上可以确定,"这个touchend是否已经结束了?"

$("#resultTable").on("touchend","#resultTable td",function(){ 
        $(this).toggleClass('stay');
});
Run Code Online (Sandbox Code Playgroud)

我提前感谢您的帮助.

PS - 使用最新的jquery,而常规点击工作,与touchend相比,它非常慢.

led*_*dje 63

使用两个听众:

首先将变量设置为false:

var dragging = false;
Run Code Online (Sandbox Code Playgroud)

然后ontouchmove设置拖动到true

$("body").on("touchmove", function(){
      dragging = true;
});
Run Code Online (Sandbox Code Playgroud)

然后在拖动完成时,检查拖动是否为真,如果是,则将其视为拖动触摸:

$("body").on("touchend", function(){
      if (dragging)
          return;

      // wasn't a drag, just a tap
      // more code here
});
Run Code Online (Sandbox Code Playgroud)

触摸端仍然会触发,但会在运行点击脚本之前自行终止.

为确保下次触摸时尚未将其设置为拖动,请在触摸时将其重置为false.

$("body").on("touchstart", function(){
    dragging = false;
});
Run Code Online (Sandbox Code Playgroud)

  • 在`if` from`touchend`中我相信你也应该拖回到假.除此之外,它很好用. (6认同)
  • 我很不高兴这种反直觉的解决方案是解决问题的最佳方法.你的答案肯定有帮助,我投了赞成票. (4认同)