今天在項目中用到了這個方法:
window.onresize 是直接給window的onresize屬性綁定事件,只能有一個。也就是說后面的會覆蓋前面。例如:
window.onresize = function(){
console.log("1")
}
window.onresize = function(){
console.log("2")
}
當瀏覽器窗口大小發生改變時,控制台只會打印 2。
而jQuery的用法 $(window).resize()可以寫多個方法:
$(window).resize(function(){
console.log("3")
});
$(window).resize(function(){
console.log("4")
});
控制台會打印3,4。
瀏覽器窗口大小改變時,這段代碼會執行多次,有時我們可能想要處理比較復雜的邏輯,會對性能影響較大,這樣就比較容易造成瀏覽器假死。
如何實現不管窗口如何改變,只在停止改變之后才執行代碼呢?
var resizeTimer = null;
$(window).bind('resize', function (){
if (resizeTimer) clearTimeout(resizeTimer);
resizeTimer = setTimeout(function(){
console.log("窗口發生改變了喲!");
} , 100);
});
通過增加定時器的方式來讓代碼延遲執行,這樣每次窗口改變的時候,我們都清除事件,只有當他停下來之后,才會繼續執行。這個方法雖然可以解決resize執行多次的問題,但是感覺還不夠完美。比如有些情況,我們需要窗口改變后立即在頁面上做一些變化,這種方法並不適用。
注意:紅色部分為關鍵代碼