【问题标题】:Underscore debounce with arguments带参数的下划线去抖动
【发布时间】:2014-10-13 10:32:58
【问题描述】:

假设我有这个事件处理程序:

var mousewheel = function (e) { /* blah */ };

但是,我想去抖动它。所以我这样做了,它按预期工作:

var mousewheelDebounced = _.debounce(mousewheel, 500);
$(document).on("mousewheel", function (e) {
  e.preventDefault();
  mousewheelDebounced(e);
}

但是这并没有按预期工作

$(document).on("mousewheel", function (e) {
  e.preventDefault();
  _.debounce(mousewheel, 500)(e);
}

我更喜欢第二种形式的紧凑性。但不会发生去抖动。

我假设没有对 mousewheelDebounced 的引用,因此每次都会调用底层处理程序。是这个原因吗?如果可能,我该如何清理这段代码?

你可以看到一个fiddle here

【问题讨论】:

    标签: javascript jquery underscore.js


    【解决方案1】:

    在每个mousewheel 事件(经常发生)上,您创建一个新版本的debounce 函数。此函数没有历史记录,也不知道在先前的事件中创建了另一个事件。所以它只是运行。这就是为什么你应该使用第一个版本。

    【讨论】:

    • 该代码每次都执行,不会发生反跳。
    • 对我不起作用。我的小提琴虽然有效:jsfiddle.net/hygo4oo6 您的原始评论是正确的,我认为需要在某处引用去抖动函数。
    • 不过,您对整个回调进行去抖动的版本并不是.preventDefault() 所有事件。
    • @Bergi 是真的,错过了。
    • @dfsq 你的答案很好,除了代码,如果你删除它我可以接受答案...