我尝试防止多次滚动事件,例如250 毫秒内仅发生一个事件。为此我在互联网上找到了下面的去抖动功能。但我无法正确使用它。怎么了?
function debounce(func, wait, immediate) {
var timeout;
return function() {
var context = this, args = arguments;
var later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
};
// my code..
$(window).on('scroll', function (e) {
debounce(function() {
// The stuff below doesn't work.
var scrollTop = $(window).scrollTop();
if (scrollTop > 50) {
$('.title').addClass('fixedPosition');
} else {
$('.title').removeClass('fixedPosition');
}
}, 250);
});
由于函数debounce
返回一个函数,您仍然需要调用它:
$(window).on('scroll', function (e) {
debounce(function() {
var scrollTop = $(window).scrollTop();
if (scrollTop > 50) {
$('.title').addClass('fixedPosition');
} else {
$('.title').removeClass('fixedPosition');
}
}()/*note the call here*/, 250);
});
这与将去抖动逻辑包装在另一个函数中不同,而该函数myLogic
将被自动调用:
function myLogic(){
var scrollTop = $(window).scrollTop();
$('.title').toggleClass('fixedPosition', scrollTop > 50);
}
$(window).on('scroll', debounce(myLogic, 250));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)