到目前为止,我所见过的每个去抖动函数示例都会防止某个 Action 在指定的时间跨度内发生多次,然后在指定的时间跨度过去后执行该 Action 一次,然后重置计时器。例如,Angular Material 中包含的 $mdUtil.debounce
函数。
我正在寻找的是一个去抖动函数,它立即 执行操作,然后阻止后续 多个操作触发,直到计时器重置。这样做的好处是,用户不必等到去抖动时间过去后才采取行动,同时仍能实现去抖动 Action 的目标。
有没有人见过或幸运地创造了一个?
更新 经过更多考虑,去抖动函数应该立即触发操作,然后,如果在去抖动时间跨度内再次调用去抖动函数,它应该触发在重置计时器之前第二次执行操作,以防第二次调用更改任何值。
最佳答案
编辑:添加 jsbin 实现
Lodash 的 debounce 可以做到这两点。您必须指定它是前导还是尾随。
https://lodash.com/docs#debounce
_.debounce(sendMail, 300, {
'leading': true,
'trailing': false
})
您还可以在几行内编写自己的去抖函数 jsbin example :
这将首先点击,然后对后续点击进行反跳。
function debounce(func, delay) {
console.log('debounce called with delay', delay);
var timer = 0;
return function debouncedFn() {
if (Date.now() - timer > delay) {
func();
}
timer = Date.now();
};
}
关于javascript - 首先触发的去抖动函数然后对后续操作进行去抖动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34552038/