javascript - Throttle-debounce 的事件对象

标签 javascript scroll jquery throttling

我正在使用 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/

相关文章:

javascript - 单击展开表格行

javascript - 在外部单击时删除类

Javascript保留小数位

javascript - jQuery 滚动到元素底部而不是顶部

jquery - 我正在尝试修复的移动导航问题(JS 或 CSS)

scroll - JBLineChartView 可滚动

javascript - asp.net 未在复选框中显示选中和未选中状态

javascript - 如何访问 js 中以特定模式开头的对象的属性?

javascript - 如何在jsfiddle中获取控制台

javascript - 将数学运算符存储在变量中?