javascript - 如何忽略除一系列快速 Javascript 事件中的最后一个事件之外的所有事件?

标签 javascript events keyboard-events

由于“changeCursor”事件(我使用的是 ACE 编辑器),我的一个脚本在某个时候调用了一个函数。当我多次按下它时,这会减慢光标的移动速度。

我真的很想调用这个函数,但如果只在我的光标停止移动时调用它也没关系(即我不需要看到中间状态)。

是否有一种标准方法可以忽略除最后一个事件之外的所有事件?

最佳答案

经典的方法是使用短超时:

var cursorTimer;
function changeCursor() {
    clearTimeout(cursorTimer);
    cursorTimer = setTimeout(function() {
        // process the actual cursor change here
    }, 500);

}

您的常规代码可以在每次更改时继续调用 changeCursor()(就像现在一样),但 setTimeout() 中的实际代码只会执行当在最后 500 毫秒内没有发生光标更改事件时。您可以根据需要调整该时间值。

知道事件已经停止的唯一方法是等待一小段时间并且没有检测到进一步的移动(这就是它所做的)。滚动事件通常使用类似的逻辑。

关于javascript - 如何忽略除一系列快速 Javascript 事件中的最后一个事件之外的所有事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15466000/

相关文章:

javascript - 2.2.0 版本异常键触发的 knockout.js 值绑定(bind)

jquery - 如何使用 on() 和 off() 将事件附加到 jQuery 移动页面?

c# - 事件处理程序/引发程序代码片段

ios8 - 如何在键盘应用程序扩展中处理 UITextField

javascript - 在 d3 的 forcelayout 算法中禁用力

javascript - 如何从 mlab 数据库检索记录

javascript - var functionOne = (function(){})() 与 var functionTwo = (function(){}())

javascript - 防止事件触发 : div over another div with position:absolute

javascript - 如何将字符映射到 IE/Mozilla 按键代码以与 Javascript keyup 事件一起使用?

objective-c - 为什么我在 Cocoa 中得不到控制字符的 keyUp/keyDown 事件?