利用DOMContentLoaded判斷DOM是否載入完畢
阿新 • • 發佈:2019-02-10
概述
瀏覽器提供一個document.onload事件,但這是頁面的全部資料都載入完畢,如果頁面有太多圖片的話,事件要等很久才觸發。如果能在DOM樹構建完畢就開始動作就會快很多。核心思想
- IE8以下的版本可以通過檢查document.documentElement.doScroll('left')是否報錯來判斷
- IE8支援onreadystatechange事件,每當document.readyState改變的時候,就會觸發一次(所以只要在readyState的值為completed就是載入完畢)
- IE9及其他主流瀏覽器支援DOMContentLoaded事件,直接註冊其事件處理程式即可
簡略步驟
在IE中
- 先完成IE8的繫結
document.attachEvent('onreadystatechange', DOMContentLoaded);
- 再來保證一定在load時執行
window.attachEvent('onload',DOMContentLoaded);
- 再用考慮非frame下IE8一下版本的情況
window.frameElement == null; // 不是frame時,frameElement值為null doScrollCheck = function () { try { document.documentElement.doScroll('left'); // 在DOM載入完前會報錯 } catch { setTimeout(doScrollCheck, 1); } }
在IE8以上的版本或其他主流瀏覽器中
- 直接利用DOMContentLoaded事件
document.addEventListener('DOMContentLoaded', DOMContentLoaded, false);
window.addEventListener('load', DOMContentLoaded, false)