如何防止排队的事件回调被触发?

时间:2014-09-20 05:31:50

标签: javascript jquery javascript-events

在jquery中,我有类似的东西:

$( "body" ).on( "touchmove", function() { ...do something expensive });

我注意到,当我快速拖动手指时,回调堆积起来,即使在我停止拖动几秒钟之后,也经常需要时间来完成。

有没有办法取消尚未解雇的回调?我试过以下......

$( "body" ).on( "touchend", function() {
  $( "body" ).off( "touchmove" );
});

......但这似乎不起作用。

1 个答案:

答案 0 :(得分:0)

您可以执行多项操作,但请谨慎使用body作为委托事件作为' body'如果样式设置不正确,则不会响应(document更可靠)。

1)完成后断开/重新连接:

var doSomethingExpensive = function(){
  // Disconnect event
  $( "body" ).off( "touchmove" );
  ...do something expensive
  // Reconnnect event handler
  $( "body" ).on( "touchend", doSomethingExpensive)
};

$( "body" ).on( "touchend", doSomethingExpensive);

2)使用忙/警卫标志

var busy = false;
$( "body" ).on( "touchmove", function() { 
    if (!busy){
      busy = true;
        ...do something expensive 
      busy = false;
    }
});

3)使用限制事件的插件

基本上,您指定它可以触发的频率,并且它包含类似于上述之一的代码,但是基于计时器。 (我没有具体的建议,建议谷歌搜索它。)

这些选项中最简单的可能就是警卫标志,这很简单明了。