您的位置:首页 > 其它

当文档准备就绪时,调用函数

2015-08-27 20:21 393 查看
/*
*传递函数给whenReady(),当稳当解析完毕且操作准备就绪时
*函数将作为文档对象的方法调用
*DOMContentLoaded、readystaatechange或者load事件发生时触发注册函数
*一旦文档准备就绪,所有函数都将被调用,任何传递给whenRead()的函数都将立即调用
**
*/
var whenReady=(function(){   //这个函数返回whenReady
var funcs=[];   //当获得事件时,要运行的函数
var ready =false; //当触发事件处理程序时,切换到true

//当文档准备就绪时,调用事件处理程序
function handler(e){

//如果已经运行过一次,只需要返回
if (ready) return;

//如果发生readystatechange事件
//但是其状态不是complete,那么文档尚未准备好
if (e.type === "readystatechange" && document.readyState !== "complete") return;

//运行所有注册函数
//注意每次都要计算funcs.length
//以防这些函数的调用可能会导致注册更多的函数
for (var i = 0; i < funcs.length; i++) {
funcs[i].call(document);
}

//现在设置ready标识为true,并移除所有函数
ready = true;
funcs = [];
}

//为接受到的任何事件注册处理程序
if (document.addEventListener) {
document.addEventListener("DOMContentLoad",handler,false);
document.addEventListener("readystatechange",handler,false)
document.addEventListener("load",handler,false)
}else if(document.attachEvent){
document.attachEvent("onreadystatechange",handler);
window.attachEvent("onload",handler);
}

//返回whenReady()函数
return function whenReady(f){
if(ready) f.call(document) ; //若准备完毕,只需要运行它
else funcs.push(f);
}
}())


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: