来自resize
上的Mozilla site,我不明白以下resizeTimeout
null
setTimeout
内var 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
答案 0 :(得分:2)
这是一种称为“限制”的常用技术,正如函数名称所暗示的那样。这使得resize处理程序最多只能每66毫秒被调用一次。
如果用户正在调整窗口大小,它将继续触发该事件并不断触发resizeThrottler函数。但是,如果每次触发调整大小事件时都执行了actualResizeHandler,那么您的页面就会陷入困境。
由于resizeTimeout在超时函数中被设置为null,因此表达式!resizeTimeout
最多只能为66毫秒。一旦这66毫秒结束,你可以设置另一个。