setTimeOut如何使用resize事件侦听器?

时间:2017-10-21 23:33:24

标签: javascript javascript-events event-handling resize addeventlistener

来自resize上的Mozilla site,我不明白以下resizeTimeout null setTimeoutvar resizeTimeout;的例子功能。这有什么用途?通过声明null并将其设置为(!resizeTimeout)null的条件为真,那么将其设置为(function() { window.addEventListener("resize", resizeThrottler, false); var resizeTimeout; function resizeThrottler() { // ignore resize events as long as an actualResizeHandler execution is in the queue if ( !resizeTimeout ) { resizeTimeout = setTimeout(function() { resizeTimeout = null; actualResizeHandler(); // The actualResizeHandler will execute at a rate of 15fps }, 66); } } function actualResizeHandler() { // handle the resize event ... } }()); 会有什么不同?

    dan ste bob
t1  na  2   na
t2  2   na  1
t3  2   1   na
t4  1   na  2
t5  na  1   2
t6  2   1   na
t7  1   na  2

1 个答案:

答案 0 :(得分:2)

这是一种称为“限制”的常用技术,正如函数名称所暗示的那样。这使得resize处理程序最多只能每66毫秒被调用一次。

如果用户正在调整窗口大小,它将继续触发该事件并不断触发resizeThrottler函数。但是,如果每次触发调整大小事件时都执行了actualResizeHandler,那么您的页面就会陷入困境。

由于resizeTimeout在超时函数中被设置为null,因此表达式!resizeTimeout最多只能为66毫秒。一旦这66毫秒结束,你可以设置另一个。