- 最近在做瀑布流的时候有个需求,就是窗口改变大小的时候,需要重新对照片布局,这时就想到了window的onresize事件···上代码
下面为了简单阅读,只给出js简单的代码。
window.onresize = function(){
console.log(1);
}
功能实现了,但是每拖动一次修改浏览器窗口的大小,都会执行好多次函数里面的代码。如果是向服务器里面发送数据,估计服务器不用很久就会崩溃。所以考虑定时器的方法来实现函数节流。
-
使用定时器的方法实现函数节流,注意,定时器的声明必须在函数外部,如果在指定的时间内还在改变浏览器的窗口大小,就清除定时器,其中定时器内就是要执行的代码(console.log(1));每次开启定时器,在200毫秒内如果浏览器窗口还在改变就清除定时器。
var timer = null;
window.onresize = fn;
function fn() {
clearTimeout(timer);
timer = setTimeout(function () {
console.log(1);
},200);
console.log(2);
};
-
使用闭包和定时器的方式实现函数节流,少了全局变量,避免了全局变量的污染。
window.onresize = fn(function () {
console.log(1);
},300);
function fn(callback,del) {
var timer = null;
var del = del || 200;
return function () {
clearTimeout(timer);
console.log(2);
timer = setTimeout(function () {
callback();
},del);
}
}