当文档准备就绪时,调用函数
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); } }())
相关文章推荐
- 数据结构堆的实现
- 2015.8.27 万年历制作
- Java数组练习
- 离线查询和在线查询
- spark core源码分析8 从简单例子看transformation
- spark core源码分析7 Executor的运行
- axis2小例子进阶二
- sql数据库中常用连接
- How to read the HTML DTD
- iOS Provisioning Profile(Certificate)与Code Signing详解
- JAVA正则表达式语法大全
- 编程之美 求二叉树中节点之间最大的距离
- HPday04-java-new Scanner(System.in).nextInt();异常
- poj 1088
- HDU 4587 TWO NODES(割点,连通块,枚举)
- Services (服务)
- log4j 输出格式控制
- 配置FTP服务
- axis小例子
- log4j配置详解