我到目前为止看到的每个debounce函数示例都阻止了一个动作在指定的时间跨度内多次发生,然后在指定的时间跨度过去后执行一次动作,然后重置计时器。例如,Angular Material中包含的$mdUtil.debounce
函数。
我正在寻找的是一个去抖动功能,可立即执行动作,然后阻止后续多个动作一直触发,直到计时器重置为止。这样做的好处是用户无需等到去抖动时间结束,直到他们采取行动,同时仍然达到了去除动作的目的。
有没有人见过一个或者有运气创造一个?
更新经过多次考虑后,debounce功能应该立即触发动作然后,如果在去抖动时间范围内再次调用去抖动功能,它应该触发如果第二次调用改变了任何值,则在重置计时器之前第二次执行该操作。
答案 0 :(得分:8)
编辑:添加jsbin实现
Lodash的去抖可以做到这两点。您必须指定它是领先还是尾随。
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();
};
}