javascript - 首先触发的去抖动函数然后对后续操作进行去抖动

标签 javascript angularjs angular-material

到目前为止,我所见过的每个去抖动函数示例都会防止某个 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/

相关文章:

javascript - 是否可以使用 Javascript 从本地文本文件中读取内容?

angularjs 将我自己的函数添加到现有的 ng-click

angular - 如何在输入字段右侧对齐 Material 图标?

javascript - SVG react 组件未渲染/黑色矩形

javascript - Mustache html 模板的安全问题

javascript - 如何将一个变量的键分配给另一个 Angular 值

javascript - 为什么我们在将函数传递给指令时需要指定括号?

javascript - 如何更改模板中的日期类型? Angular 2+

Angular flex-layout - fxLayoutGap 在包装行的末尾导致烦人的间隙

javascript - 使用 javascript 将 Web 表单值传递给 python 脚本