瀏覽器加載頁面是按從上到下順序加載的,如果想要在頁面加載完成時被觸發(fā)腳本,可以監(jiān)聽這兩個事件 : load 和 DOMContentLoaded
load
load事件是頁面 "loading complete"的標(biāo)志
window.onload = function (){
//do something
}
缺點(diǎn)
在所有資源完全加載后才被觸發(fā),包括圖片,會導(dǎo)致比較嚴(yán)重的延遲
因此這個方法很少使用,開發(fā)人員又制定了DOMContentLoaded事件
DOMContentLoaded
DOMContentLoaded在DOM加載之后及資源加載之前被觸發(fā),不支持IE8及其以下
document.addEventListener( "DOMContentLoaded", ready, false)
Hacks for IE<9
function bindReady(handler){
var called = false
// 確保handler只執(zhí)行一次
function ready() {
if (called) return
called = true
handler()
}
if ( document.addEventListener ) {
// native event
document.addEventListener( "DOMContentLoaded", ready, false )
} else if ( document.attachEvent ) {
// IE
try {
var isFrame = window.frameElement != null
} catch(e) {}
// IE, the document is not inside a frame
if ( document.documentElement.doScroll && !isFrame ) {
function tryScroll(){
if (called) return
try {
document.documentElement.doScroll("left")
ready()
} catch(e) {
setTimeout(tryScroll, 10)
}
}
tryScroll()
}
// IE, the document is inside a frame
document.attachEvent("onreadystatechange", function(){
if ( document.readyState === "complete" ) {
ready()
this.onreadystatechange = null
}
})
}
// Old browsers
if ( window.addEventListener ) {
window.addEventListener('load', ready, false)
} else if ( window.attachEvent ) {
window.attachEvent('onload', ready)
} else {
// very old browser, copy old onload
var fn = window.onload
// replace by new onload and call the old one
window.onload = function() {
fn && fn()
ready()
}
}
}
主流框架中DOMContentLoaded事件的實(shí)現(xiàn):
http://www.html5jscss.com/mian_ready.html