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

joe*_*oro 5 javascript events keyboard-events

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

我真的很想调用这个函数,但是如果只在我的光标停止移动时才调用它就可以了(即我不需要查看中间状态)。

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

jfr*_*d00 6

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

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

}
Run Code Online (Sandbox Code Playgroud)

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

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