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

我正在寻找的是一个反跳功能,该功能可以立即执行操作,然后阻止触发后续的多个操作,直到计时器重置。这样做的好处是,用户不必等待去抖动时间,直到采取他们的 Action 为止,同时仍然可以实现对 Action 进行反跳的目标。

有没有人看过一个或有幸创造了一个?

更新再想一想,debounce函数应立即触发该 Action ,然后,如果在debounce时间间隔内再次调用了debounce函数,则应在重置计时器之前第二次触发该 Action ,以防第二次调用被更改任何值。

最佳答案

编辑:添加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();
  };
}

关于javascript - 会先触发反跳功能,然后反跳后续 Action ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34552038/

10-13 03:46