Jquery 使用外部库动画避免重复的滑动事件处理

Jquery 使用外部库动画避免重复的滑动事件处理,jquery,hammer.js,duplicate-detection,Jquery,Hammer.js,Duplicate Detection,我有一个拖动事件处理程序,它可以启动(1)动画和(2)调整计数器。当我拖动目标时,会多次触发多个处理程序,并且计数器是错误的。触摸事件基于Hammer.js $(hammer).on('swipeleft',function(){ doAnimation(); counter++; } 请注意,由于连续(长时间)拖动中的多个事件,以及用户在动画期间快速拖动多次(因此我不能依赖“释放”事件),处理程序可能会被触发多次 另外,doAnimation()被包装在一个单独的动画库中,因此我

我有一个拖动事件处理程序,它可以启动(1)动画和(2)调整计数器。当我拖动目标时,会多次触发多个处理程序,并且计数器是错误的。触摸事件基于Hammer.js

$(hammer).on('swipeleft',function(){
   doAnimation();
   counter++;
}
请注意,由于连续(长时间)拖动中的多个事件,以及用户在动画期间快速拖动多次(因此我不能依赖“释放”事件),处理程序可能会被触发多次

另外,doAnimation()被包装在一个单独的动画库中,因此我不想弄乱该库中的一些代码(除非我没有其他选择)。一个极端的例子是我使用-webkit转换特性来实现动画

$(hammer).on('swipeleft',function(){
   $('.content').css('width',0);//-webkit-transition: all 0.5s ease;
   counter++;
}

我如何处理这种情况?

您可以这样做:

var isDraging = false;

// -- Increment counter only if this is the first drag event:
$(hammer).on('drag',function(){
   doAnimation();
   if(!isDraging)
      counter++;
   isDraging = true;
}

// -- When dropping, set flag to false again:
$(hammer).on('drop',function(){
   isDraging = false;
}

嗯,我可能会用“拖拉”这个误导性的词。我的意思是“刷”,立即设置一个标志是不好的。理想情况是在动画结束时在doAnimation()中设置标志。