有没有办法在窗口调整大小结束后 1 秒执行函数?
例如对于此代码:
$(window).bind("resize", methodToFixLayout);
function methodToFixLayout(e) {
... some code ...
};
基本上我想执行一些css更改,但只执行一次,在最后一个窗口调整大小后1秒..现在这触发了太多次,让一切都变得非常慢..
有没有办法在窗口调整大小结束后 1 秒执行函数?
例如对于此代码:
$(window).bind("resize", methodToFixLayout);
function methodToFixLayout(e) {
... some code ...
};
基本上我想执行一些css更改,但只执行一次,在最后一个窗口调整大小后1秒..现在这触发了太多次,让一切都变得非常慢..
var timer;
$(window).bind('resize', function() {
if(timer)
clearTimeout(timer);
timer = setTimeout(function(){ /* Whatever you want here */ }, 1000);
});
如果用户不断拖动窗口,resize 事件将快速触发,该方法将在拖动停止 1 秒时触发一个动作。
编辑:烤和 adeneo 的好评,只需调用 clearTimeout(timer) 而不检查是否设置了计时器,步骤更少/效率更高
var timer;
$(window).bind('resize', function() {
clearTimeout(timer);
timer = setTimeout(function(){ /* Whatever you want here */ }, 1000);
});
您需要一个超时时间,并且由于 resize 事件连续触发,您应该清除新调整大小的超时,以确保它不会多次触发:
var timer;
$(window).on("resize", function() {
clearTimeout(timer);
timer = setTimeout(function() {
... some code ...
},1000);
});
或没有全局:
$(window).on("resize", function() {
clearTimeout($(this).data('timer'));
$(this).data('timer', setTimeout(function() {
... some code ...
},1000)
);
});
尝试这个 :
var timer;
$(window).bind("resize", methodToFixLayout);
function methodToFixLayout(e) {
if(timer) clearTimeout(timer);
timer = setTimeout(function(){
... some code ...
},1000);
};
你需要setTimeout()。
例如
var timeout;
$(window).on('resize', function() {
if (timeout) {
clearTimeout(timeout);
}
timeout = setTimeout(yourMethodToFixLayout, 1000);
});
在这里演示:http: //codepen.io/anon/pen/LcAIC