Jquery 不要在1秒内再次执行javascript,即使触发器被重新触发
即时消息检测页面上的滚动,并在用户上下滚动时执行一些代码。问题是代码很快就会触发多次。我需要的代码,一旦它被执行,不能再执行一秒钟 理想情况下,任何执行都将被禁用1秒。所以如果//do something刚刚启动,那么它在1秒内不能再次启动,也不能//执行其他操作 注意-我知道这不是完全可靠的跨浏览器,但目前这还可以。它也不需要用于触摸屏滚动Jquery 不要在1秒内再次执行javascript,即使触发器被重新触发,jquery,Jquery,即时消息检测页面上的滚动,并在用户上下滚动时执行一些代码。问题是代码很快就会触发多次。我需要的代码,一旦它被执行,不能再执行一秒钟 理想情况下,任何执行都将被禁用1秒。所以如果//do something刚刚启动,那么它在1秒内不能再次启动,也不能//执行其他操作 注意-我知道这不是完全可靠的跨浏览器,但目前这还可以。它也不需要用于触摸屏滚动 $(document).ready(function(){ $('body').bind('mousewheel', function(e){
$(document).ready(function(){
$('body').bind('mousewheel', function(e){
if(e.originalEvent.wheelDelta /120 > 0) {
//do something
}
else{
//do something else
}
});
});
我尝试过使用超时功能,但它似乎会等待并触发多次,而不是一次:
setTimeout(function() {
//do something
event.stopPropagation();
}, 1000);
一种方法是在您第一次调用事件后立即解除绑定,然后使用setTimeout重新绑定该事件。请查看debounce/throttle。本·阿尔曼(Ben Alman)写了一篇流行的文章,提供了这种功能。另见 去盎司还是节流?从文档中: 简单地说,节流限制了 函数设置为每延迟毫秒不超过一次,消除抖动 保证函数只执行一次 (给定一个指定的阈值)
设置超时,然后清除每个滚动上的超时,这样,超时仅在用户停止滚动时执行,而不是每次:
$(document).ready(function(){
$('body, html').on('scroll', function(e){
clearTimeout( $(this).data('timer') );
$(this).data('timer',
setTimeout(function() {
if( $(this).scrollTop() > 0) {
}else{
//do something else
}
}, 1000)
);
});
});
你应该试试看