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

或者,最好使事件队列跳过队列中除最近事件以外的所有mousemove事件?

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

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

最佳答案

使用事件反跳。 This small throttle/debounce library在有或没有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);

09-10 11:28
查看更多