在jquery中,我有类似的东西:
$( "body" ).on( "touchmove", function() { ...do something expensive });
我注意到,当我快速拖动手指时,回调堆积起来,即使在我停止拖动几秒钟之后,也经常需要时间来完成。
有没有办法取消尚未解雇的回调?我试过以下......
$( "body" ).on( "touchend", function() {
$( "body" ).off( "touchmove" );
});
......但这似乎不起作用。
答案 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)使用限制事件的插件
基本上,您指定它可以触发的频率,并且它包含类似于上述之一的代码,但是基于计时器。 (我没有具体的建议,建议谷歌搜索它。)
这些选项中最简单的可能就是警卫标志,这很简单明了。