降低Javascript事件轮询的频率

JoJ*_*oJo 7 javascript onresize event-handling javascript-events onscroll

你如何降低javascript事件轮询的频率?我关注的事件是onResizeonScroll.当有人调整浏览器大小或向下滚动时,这些事件可能会每秒触发几十次.我希望这些事件每500毫秒才会发生一次,所以我不必花费数小时优化我的事件处理程序并确保它们不会泄漏内存.

ale*_*lex 9

var resizeTimeout;

window.onresize = function() {
    if (resizeTimeout) {
        clearTimeout(resizeTimeout);
    }
    resizeTimeout = setTimeout(function() {
        // Do it!
    }, 500);

});
Run Code Online (Sandbox Code Playgroud)

这个将setTimeout()在人完成大小调整后触发~500ms 的功能.

onscroll版本非常相似:)

  • 这个不会每500毫秒开一次,它只会在你停止/暂停调整大小后激活500毫秒 (3认同)

And*_*rey 5

你真的无法控制如何频繁的事件触发,你可以做这样的事情还记得第一个事件触发的时间,然后在每个随后的一个你检查它是否是从第一个超过500毫秒 - 如果是,你与该事件进行处理程序,否则你只是退出事件hanlder