问题标签 [debouncing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
437 浏览

javascript - document.scroll 的去抖动功能

我的功能导致滚动缓慢

我读到了一个去抖函数(https://davidwalsh.name/javascript-debounce-function),但不幸的是我不能让它与我的函数一起工作。

有人可以给我一个提示如何实现函数的去抖动吗?先感谢您!

0 投票
3 回答
9568 浏览

javascript - 去抖动 jquery 滚动事件

我只是有一个关于去抖动的一般性问题。我在页面上的不同位置有三个菜单,当它们在滚动时到达距离窗口顶部 85px 的位置时,它们会变得固定。当它们到达顶部时,它们会分层重叠。我目前对每个功能都有一个功能,并且希望尽可能地进行优化。我的阅读表明 .offset.top 计算非常繁琐。

我的问题是:我是不是想多了,在这种情况下有必要去抖动吗?如果我的解释是正确的,那么三个偏移量计算会在滚动时不断执行。任何人都可以建议优化或解释为什么它不是必需的。

谢谢你。

0 投票
1 回答
27 浏览

vb.net - 由解锁 if 语句 VB.NET 引起的弹跳

是否有一种解决方案可以为我的 VB.NET if 语句生成更好的输出。我试图通过在低于或高于这些值时将其设置为最小值和最大值来防止它被锁定。它有效,但输出并不那么迷人,即值来回反弹。

0 投票
1 回答
2350 浏览

javascript - Lodash _.debounce 具有用于独特参数变体的单独队列

我非常感谢 lodash 的去抖动和节流功能。我相信我非常了解这些用例,并且已经实施了数十次。

但是,根据要求,带有参数的 _.debounce 函数可能会出现重大且难以捕捉的错误。也就是以下内容:

假设您有一个名为 debounce 的函数debounceFn,它接受一个参数并且具有 1000ms 的 debounce 间隔。

  • 100 毫秒:debounceFn(1)
  • 200 毫秒:debounceFn(2)
  • 300 毫秒:debounceFn(2)
  • 400毫秒:debounceFn(1)
  • 500 毫秒:debounceFn(1)

子函数最终将使用参数 1 进行调用。这对于调整大小事件非常有用,您只关心最后一个值,但是如果您需要根据参数分离的去抖动队列怎么办?也就是说,不是用参数 1 调用的进程,而是用参数 1 和参数 2 调用进程,但只调用一次(因为它们都被去抖动)。

作为一个扩展且稍微复杂的示例,请考虑以下参数的组合,其中该组合会产生一个唯一的队列。

实际输出:

  • a: lime b: kiwi

所需的输出(可以翻转前两个输出的顺序)

  • a: apple b: banana
  • a: apple b: orange
  • a: lime b: kiwi

我在 _.debounce 上看到了许多关于接受参数的 SO 问题。这不再是一个有趣的问题,所以 - 你如何创建单独的去抖动队列?

使用 Lodash _.debounce 函数、Lodash 库和 JavaScript 原生功能实现此目的的优雅方式(简单、易于阅读的代码)是什么?也许是 _.debounce 和 _.memoize 的组合(我尝试将 _.debounce 与 _.memoize 包装,但需要进一步探索以了解 memoize)。或者也许是一个函数来“散列”参数并为每个参数组合创建一个新的 _.debounce 队列?

0 投票
2 回答
952 浏览

javascript - 仅在 Angular 中处理最新异步请求的响应的模式?

发现了一个关于去抖动输入和处理响应的错误。

我有一个搜索输入,可在您键入时查询服务器。我将它设置为 300 毫秒的去抖动。但是,有时会出现一些奇怪的行为:

用户键入“ab”,等待 300 毫秒,在第一个请求解析之前键入“c”。在搜索栏中,他们看到“abc”,但现在有两个网络请求。有时第二个请求(“abc”)首先解析,然后第一个请求(“ab”)解析并覆盖结果列表。所以用户看到了“ab”的结果列表,但搜索输入有“abc”。

这似乎不是一个 debounce 本身的问题,而更像是寻找一种方法来丢弃“旧”承诺,以便在解决时可以忽略它们。

例如 - 我想要什么

  • 类型"ab"
  • 发送请求“ab”
  • 类型"c"
  • 发送请求“abc”
  • "abc" 返回响应,处理承诺解决
  • "ab" 返回响应,忽略承诺

在 Angular 中,这类事情有什么常见的模式/方法吗?听起来这将是一个普遍的问题。

例如“仅解决已创建的最新承诺”?

0 投票
14 回答
40724 浏览

angular - 如何在角度 2 中为异步验证器添加去抖动时间?

这是我的异步验证器,它没有去抖动时间,我该如何添加它?

0 投票
0 回答
52 浏览

javascript - Angular on-change multiple calls removal(debounce/timers/time manipulation?)

I have a situation where I can't use debounce in html like ng-model-option: {debounce:1000}

But I want to remove repeated callbacks to function doCallback in my directive, and make only 1 call in 1s

html: <input ng-change="vm.GetStuff">

angular directive:

maybe there is an easier way to remove unnessesary calls to this.doCallback() ?

0 投票
1 回答
35 浏览

javascript - 干燥 ng-model

我有一个小型网络应用程序,它接受input人类创建搜索参数。我正在使用ng-model-options去抖动ng-change函数来执行搜索。

我在表格上的列名旁边有小箭头,可以让用户进行排序(有三个图标 - up-downupdown用于显示的 sort_field 和 sort_order ng-class);我想对这些进行更改,并在使用 debounce 稍作延迟后执行搜索。问题是我不确定如何使用ng-model将特定参数绑定到这些图标。我不希望有人敲击排序图标并使服务器或他们的浏览器崩溃。

我宁愿在页面上有一个地方说观察search_param对象并在它发生变化后 500 毫秒触发搜索。这样,当用户完成编辑它们时将调用任何输入字段或排序选择,这会触发将这些参数发送到端点的函数。

AngularJS 的策略是什么?现在所有输入字段都绑定search_param对象中的一个字段,并且必须ng-model-options在更改时去抖动。这是很多重复的代码。

0 投票
0 回答
927 浏览

angularjs - 以角度去抖动 ng-change 事件

什么是消除 ng-change 事件的好方法?我知道 ng-model 选项中可用的去抖动,但我希望我的模型在它发生变化时立即更新,因为用户可以选择提交此数据,我不希望帖子中丢失任何信息,因为模型正在等待去抖动。我确实想在我的 ng-change 事件或它调用的函数上添加一个去抖动器。我的元素的 html

我想对 saveProg 函数进行去抖动处理,这样它就不会为每个键入的字符运行一次,而是每秒运行一次左右。我的功能看起来像这样

0 投票
0 回答
1273 浏览

vhdl - 编码器去抖 VHDL

为了练习,我尝试制作一个 VHDL 代码来运行旋转编码器硬件。它充满了去抖、正交解码器和向上/向下计数器代码。

不幸的是,当使用测试台运行模拟时,我的结果令人失望,因此我决定需要单独分析每个块。对于去抖代码,我创建了一个符号文件并生成了下面的电路

用于模拟去抖块的示意图设置 (可点击)

在尝试在模拟中对测试台信号进行去抖动时,我发现我的结果很糟糕,所以我相信我遗漏了一些东西。

使用 debounce 测试台值的 modelsim 仿真 (可点击)

编码器块的 VHDL 代码可以在这里找到:

它可能充满了不需要的逻辑,因为我对自己在做什么的想法有限,我拿了一个朋友的一般去抖动代码并对其进行了编辑以尝试满足我的特定需求。

如果需要任何额外的东西,我愿意提供。我觉得这是一个非常基本的错误,但我只需要任何帮助。

如果这有助于识别切换属性,请查看我使用的测试台代码: