【js学习笔记-093】------文档加载事件

文档加载事件

大部分web应用都需要web浏览器通知它们文档加载完毕和为操作准备就绪的时间。Window对象的load事件就是为了这个目的,load事件直到文档和所有图片加载完毕时才发生。然而,在文档完全解析之后但在所有图片全部加载完毕之前开始运行脚本通常是安全的。所以如果基于“load”发生之前的事件触发脚本会提升web应用的启动时间。

当文档加载解析完毕且所有延迟脚本都执行完毕时会触发DOMContentLoaded事件,此时图片和异步脚本可能依旧在加载,但是文档已经准备就绪。Firefox引入了这个事件,然后它被包括microsoft的IE9在内的其它厂商采用。

Document.readyState属性随着文档加载过程而变,在IE中,每次状态改变都伴随着Document对象上的readystatechange事件,当IE接收到”complete”状态时使用这个事件来做判断是可行的。Html5标准化了readystatechange事件,但它仅在load事件之前立即触发,所有目前尚不清楚监听’readystatechange’取代“load”会带来多大好处。

//传递 函数给whenReady(),当文档解析完毕且为操作准备就绪时,

//函数将作为文档对象的方法调用

//一旦文档准备就绪,所有函数都将被调用,任何传递给whenReady()的函数都将立即调用

 

var whenReady = (function(){

var funcs = [];//当获得事件时,要运行的函数

var ready =false; //当触发事件处理程序时,切换到true

function  handler(e){

    if(ready) return;

    if(e.type===”readystatechange” &&document.readyState !==”complete”)return;

    for(var i=0;i<funcs.length;i++){

      funcs[i].call(document);

    }

    ready = true;

    funcs = null;

}

if(document.addEventListener){

   document.addEventListener(“DOMContentloaded”,handler,false);

document.addEventListener(“readystatechange”,handler,false);

document.addEventListener(“load”,handler,false);

}else if(document.attachEvent){

     document.attachEvent(“onreadystatechange”,handler);

     window.attachEvent(“onload”,handler);

}

//

return   function   whenReady(f){

     if(ready) f.call(document)

     else funcs.push(f); //否则,加入队列等候

} 

})();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值