jQuery-如何将滚动视为单个事件?
当我将函数绑定到滚动和滚动鼠标滚轮一次时,该函数会运行七到八次。当我滚动鼠标滚轮一次时,我希望它只运行一次,这可能吗?我使用以下代码:jQuery-如何将滚动视为单个事件?,jquery,scroll,Jquery,Scroll,当我将函数绑定到滚动和滚动鼠标滚轮一次时,该函数会运行七到八次。当我滚动鼠标滚轮一次时,我希望它只运行一次,这可能吗?我使用以下代码: $(document).ready(function () { $(window).bind('scroll', function() { alert("Scroll."); } }); }); 如果“一次”是指每页加载一次, 您可以使用off()方法解除侦听器中事件的绑定。 还可能发生名称空
$(document).ready(function () {
$(window).bind('scroll', function() {
alert("Scroll.");
}
});
});
如果“一次”是指每页加载一次,
您可以使用off()
方法解除侦听器中事件的绑定。
还可能发生名称空间事件,如:
scroll.namespace
仍然是同一事件,但您可以具体解除绑定
$(document).ready(function () {
$(window).on('scroll.myEvent', function() {
$(window).off('scroll.myEvent');
alert("Scroll.");
}
});
});
试一试
演示:您可以使用插件中的节流功能
只是Aruns答案的一个变体: 类似的方法,只是立即触发事件,然后在一段时间内防止再次处理事件。 这样你就不必在处理事件之前等待
$(document).ready(function () {
var locked = false
, timeout;
$(window).bind('scroll', function() {
//do nothing if still locked
if(true === locked){
return false;
}
//lock
locked = true;
//do something if not locked
alert('scroll!')
clearTimeout(timeout)
timeout = setTimeout(function(){
//unlock
locked = false;
}, 1000)
});
});
如果只想检测一次滚动,请使用以下方法:
$(function () {
var done = false;
$(window).bind('scroll', function() {
if (!done){
alert("Scroll.");
done = true;
}
});
});
但是,如果您想检测每个滚动事件,请尝试回答4这样的问题,即“一次”的滚动次数是多少?每个浏览器都有自己的滚动分辨率。短滚动可能会调用许多滚动事件。这是很自然的。我所说的“一次”是指一个不间断的卷轴,无论不是我多久,我都会记住你。为了速度,如果没有别的;)@RoryMcCrossan这是一个已知的问题和解决方案。这对我来说非常适合,但我想这会减慢速度。。!!这个解决方案正在发挥作用。我看不出它怎么没有被评得更高。这应该是被接受的答案,而且肯定是最高的。
$(document).ready(function () {
var locked = false
, timeout;
$(window).bind('scroll', function() {
//do nothing if still locked
if(true === locked){
return false;
}
//lock
locked = true;
//do something if not locked
alert('scroll!')
clearTimeout(timeout)
timeout = setTimeout(function(){
//unlock
locked = false;
}, 1000)
});
});
$(function () {
var done = false;
$(window).bind('scroll', function() {
if (!done){
alert("Scroll.");
done = true;
}
});
});