1

在 Javascript 中,是否可以在 mousemove 事件处理程序中确定队列中是否有任何挂起的 mousemove 事件?

或者,最好是,是否可以让事件队列跳过队列中的所有 mousemove 事件,除了最近的事件?

我正在使用 mousemove 和其他鼠标事件来允许用户在屏幕上拖动元素,并且我不需要浪费 CPU 和 GPU 周期在每个 mousemove 事件上重绘拖动的项目(在其中我更新顶部和左侧 CSS 属性),只要我能足够快地跳过中间事件。

我的网站目前没有遇到任何性能或可视化问题;我只是想让我的 JavaScript 尽可能高效。

4

2 回答 2

1

使用事件去抖动。这个小型节流/去抖动库无论有无 jQuery 都可以很好地工作。

例子:

function someCallback() {
    // snip
}

// don't fire more than 10 times per second
var debouncedCallback = Cowboy.debounce(100, someCallback);
document.getElementById('some-id').addEventListener('mousemove', debouncedCallback);
于 2013-02-19T00:18:27.870 回答
0

您可以跟踪上次处理鼠标移动的时间,如果太早,则跳过当前的。

例如:

elem.onmousemove = function() {
    var lastcalled = arguments.callee.lastCallTime || 0,
        now = new Date().getTime();
    if( now-lastcalled < 250) return;
    arguments.callee.lastCallTime = now;
    // rest of code here
};
于 2013-02-19T00:19:28.527 回答