发射FIRST的反弹功能然后去除后续动作

时间:2015-12-31 22:15:39

标签: javascript angularjs angular-material

我到目前为止看到的每个debounce函数示例都阻止了一个动作在指定的时间跨度内多次发生,然后在指定的时间跨度过去后执行一次动作,然后重置计时器。例如,Angular Material中包含的$mdUtil.debounce函数。

我正在寻找的是一个去抖动功能,可立即执行动作,然后阻止后续多个动作一直触发,直到计时器重置为止。这样做的好处是用户无需等到去抖动时间结束,直到他们采取行动,同时仍然达到了去除动作的目的。

有没有人见过一个或者有运气创造一个?

更新经过多次考虑后,debounce功能应该立即触发动作然后,如果在去抖动时间范围内再次调用去抖动功能,它应该触发如果第二次调用改变了任何值,则在重置计时器之前第二次执行该操作。

1 个答案:

答案 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();
  };
}