我正在使用 Ben Alman 的 Throttle-debounce 插件。
当我这样调用 .throttle 时:
$(window).scroll($.throttle(250, function() {console.log(1)}));
throttle 函数触发。
但我必须检查滚动事件是否未触发。所以当我这样做时
$(window).scroll( function(event) {
if (!event.isTrigger) {
$.throttle(250, function() {console.log(1)});
console.log(2);
}
});
我只得到“2”的结果。由于某种原因, throttle 功能没有启动。 (第二个控制台打印是为了显示该代码通过了 throttle 函数)
最佳答案
我从未使用过 Ben 的插件,但看起来 throttle 插件不会触发该函数,它返回一个新函数,该函数每秒只能触发 x 次(或其他)。这是可行的,因为在 JS 中函数是一等对象,因此函数只能返回一个新函数。
因此,如果您希望该函数触发,您需要调用它,
var throttledFunc = $.throttle(250, function() {console.log(1)});
$(window).scroll( function(event) {
if (!event.isTrigger) {
throttledFunc(event);
console.log(2);
}
});
您还可以重构您的第一个示例,例如
var throttledFunc = $.throttle(250, function() {console.log(1)});
$(window).scroll(throttlesFunc);
jquery 内部会获取传入的函数引用,当滚动事件触发时,它会执行 throttlesFunc(event)
关于javascript - Throttle-debounce 的事件对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19816415/