窗口调整大小结束后1秒钟有没有办法执行函数?
例如,此代码:
$(window).bind("resize", methodToFixLayout);
function methodToFixLayout(e) {
... some code ...
};
基本上我想执行一些css更改,但只有ONCE,在最后一个窗口调整大小后1秒。现在这会触发太多次并使一切都很慢..
答案 0 :(得分:7)
var timer;
$(window).bind('resize', function() {
if(timer)
clearTimeout(timer);
timer = setTimeout(function(){ /* Whatever you want here */ }, 1000);
});
如果用户不断拖动窗口,resize事件将快速触发,此方法将在拖动停止1秒后触发操作。
编辑: 烤和adeneo的好评,只需调用clearTimeout(计时器)而不检查计时器是否已设置,步骤更少/效率更高
var timer;
$(window).bind('resize', function() {
clearTimeout(timer);
timer = setTimeout(function(){ /* Whatever you want here */ }, 1000);
});
答案 1 :(得分:6)
你需要一个timeOut,并且由于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)
);
});
答案 2 :(得分:0)
试试这个:
var timer;
$(window).bind("resize", methodToFixLayout);
function methodToFixLayout(e) {
if(timer) clearTimeout(timer);
timer = setTimeout(function(){
... some code ...
},1000);
};
答案 3 :(得分:0)
您需要setTimeout()。
E.G。
var timeout;
$(window).on('resize', function() {
if (timeout) {
clearTimeout(timeout);
}
timeout = setTimeout(yourMethodToFixLayout, 1000);
});