Javascript 先触发然后取消后续操作的取消抖动功能

Javascript 先触发然后取消后续操作的取消抖动功能,javascript,angularjs,angular-material,Javascript,Angularjs,Angular Material,到目前为止,我看到的每一个去盎司函数示例都会在指定的时间跨度内防止一个操作多次发生,然后在指定的时间跨度过去后执行一次该操作,然后重置计时器。例如,角度材质中包含的$mdUtil.debounce函数 我要寻找的是一个去盎司函数,它立即执行动作,然后防止随后的多个动作触发,直到计时器重置。这样做的好处是,用户不必等到解除抖动时间过去,直到他们的动作被采取,同时仍然实现解除抖动动作的目标 有没有人见过或有幸创造了一个 更新经过仔细考虑后,去Bounce函数应立即启动操作,然后,如果在去Bounce

到目前为止,我看到的每一个去盎司函数示例都会在指定的时间跨度内防止一个操作多次发生,然后在指定的时间跨度过去后执行一次该操作,然后重置计时器。例如,角度材质中包含的
$mdUtil.debounce
函数

我要寻找的是一个去盎司函数,它立即执行动作,然后防止随后的多个动作触发,直到计时器重置。这样做的好处是,用户不必等到解除抖动时间过去,直到他们的动作被采取,同时仍然实现解除抖动动作的目标

有没有人见过或有幸创造了一个


更新经过仔细考虑后,去Bounce函数应立即启动操作,然后,如果在去Bounce时间范围内再次调用去Bounce函数,则应在重置计时器之前第二次启动操作,以防第二次调用更改任何值。

编辑:添加jsbin实现

洛达斯的去盎司可以做到这两个方面。您必须指定它是前导还是尾随

您也可以用几行代码编写自己的去模糊函数:

这将首先单击,然后取消随后的单击

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

您发布的示例更像是一个节流函数,而不是去盎司函数。它总是会忽略最后一个调用,这对我来说很重要,因为我正在更新窗口大小的值,并且需要最新的值。不过,lodash函数可以完美地工作。谢谢。油门将每x秒调用一次该功能。而debounce将阻止用户随后的单击,并且仅在用户在x秒内未单击它时重新启用。我的代码示例的工作原理与后一个示例类似。无论您如何调用它,我都需要它立即执行,如果在间隔期间进行了调用,则需要再次执行。使用Lodash
\uu.debounce
并将“前导”和“尾随”都设置为true,可以完美地实现这一点。谢谢你的帮助。我重读了你的评论,你是对的。我现在明白了。如果在去盎司延迟时间内连续调用该函数,它将永远不会触发该操作。它只会在没有呼叫的情况下经过去盎司延迟时间后发射。然而节流允许每个间隔执行一个操作。好吧,所以Henry Zou显示的示例代码对您不起作用,您需要使用lodash。我的问题更糟,因为我的函数返回promise,所以取消公告的版本也需要返回promise。看看你是否感兴趣:D
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();
  };
}