如何防止启动排队的事件回调
How to prevent queued event callbacks from firing?
在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)使用一个插件来抑制事件
基本上,您可以指定它的触发频率,并将代码包装为类似于上面的代码,但基于计时器。(我没有具体的建议,建议在谷歌上搜索一下)。
这些选项中最简单的可能是保护标志,它很简单,也很明显。
相关文章:
- Javascript点击事件回调不起作用
- Facebook转换事件回调
- 页面上的所有推特推文都呈现了事件/回调
- 检测事件回调的开始和结束
- 使用qunit.js查询事件回调测试
- Babel中的d3事件回调上下文更改
- socket.io事件回调中模型更改时角度视图未更新
- 从事件回调中引用包含主干视图
- 就地休息 gem 成功事件回调
- 如何在 JavaScript 中编写高效的事件回调方法
- jQuery 事件回调速度:匿名与命名函数
- 事件回调在 Mozilla Firefox 中未触发
- 在事件回调中获取对模型的引用
- 在 Backbone 中.js事件回调这是什么,以及如何访问触发的元素
- 什么是.js完整的事件回调
- 将参数传递给项视图中的事件回调
- 多态函数作为事件回调
- 这真的是从事件回调中获取 Rx.Observable 的最佳方式吗?
- GTM数据层事件回调函数
- 管理“;这个“;在事件/回调驱动的JavaScript应用程序中