Javascript addEventListener,只跳到最新的事件(同类型,'mousemove'),只处理最新的事件

Javascript addEventListener, skip to the latest event (of the same type, 'mousemove') only and handle the latest event only

我想知道当您在 Javascript 的事件循环中有多个其他相同类型的事件时,是否可以跳转到并处理最新的事件。我问这个是因为,我制作了一个 Javascript 程序,它会在每次鼠标指针移动时报告 'mousemove' 事件。问题是,出于某种原因,事件处理没有达到应有的速度,而我的 PC 或代码肯定不是问题所在。

我认为问题在于网络浏览器限制了每帧可以处理的 'mousemove' 事件的数量。因此,我不想处理 queue 中的所有事件,而是想跳转到最新的事件并处理它并丢弃所有旧事件,而不是执行所有事件 one-by-one.

我不确定 Javascript 是否可行,所以这就是我寻求帮助的原因。

任何帮助将不胜感激...:-)

Here 是我的应用程序。问题是,如果您尝试将 window 的标题栏区域向上或向下移动得太快,您将失去 window 本身的句柄。现在,这不应该发生在现代 GUI 中。

更新 'Debouncing' 答案:

所以,有人建议我应该使用去抖功能。那不能解决我的问题。在最好的情况下,它只会延迟需要做的事情。因此,例如,如果我在 (4,0) 处有一个像素,然后我尝试将它向左移动 3 个像素,即 (1,0),它会以正常方式出现,但只是一点点延迟。也就是说,如果假设(我正在编造这个)queue 上的一个新的 'mousemove' 事件每 1 毫秒处理一次,并且代码为 运行 所花费的时间此示例为 0 毫秒,在代码中,我们将函数设置为在处理新事件后 2 毫秒执行代码。这意味着实际上只有最新的事件会被处理,然后代码将在最新事件的侦听器函数开始 运行 2 毫秒后 运行。因此,将一个像素向左移动 3 个像素,仍然需要 5 毫秒。那仍然慢。我实际上需要使用鼠标指针的坐标更新我的 Web 应用程序,从它实际所在的位置开始。

我的解决方案:

每次 'mousemove' 事件的侦听器开始执行时,我应该从鼠标指针获取坐标,而不是从事件的 .clientX 和 .clientY 属性获取坐标。一旦注册了 'mousemove' 事件并且当时创建了 object 事件(也没有' t 有鼠标指针的 up-to-date 坐标)。我已经搜索了如何在没有实际事件的情况下获取实际鼠标指针坐标的解决方案object,但到目前为止,我只阅读了关于它不可能的回复。

This 人遇到了和我完全一样的问题。我现在正在记录鼠标的全局(文档)位置,但应用程序的行为仍然相同。

我对这个问题的解决方案:

我已将 'mousemove' 和 'mouseup' 事件从拖动的对象移动到文档本身。