如何防止启动排队的事件回调

How to prevent queued event callbacks from firing?

本文关键字:事件 回调 排队 何防止 启动      更新时间:2023-09-26

在jQuery中,我有这样的东西:

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

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

有没有办法取消尚未启动的回调?我尝试过以下几种:

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

然而,这似乎并不奏效。

您可以做几件事,但请小心将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)使用一个插件来抑制事件

基本上,您可以指定它的触发频率,并将代码包装为类似于上面的代码,但基于计时器。(我没有具体的建议,建议在谷歌上搜索一下)。

这些选项中最简单的可能是保护标志,它很简单,也很明显。