ready事件是jquery的一个很重要的功能,在很久很久以前,我们是使用window.onload监听页面加载成功的,onload事件的好处是你不用考虑浏览器兼容性,也不需要依赖任何框架就可以写,但是在正规的项目最好不要用,他的缺陷是触发的太晚了,要等待所有的图片都加载完成才会触发,严重拖慢了整体的加载性能,于是有了DOMContentLoaded,IE自然是不支持的,但是IE有onreadystatechange事件可以达到同样的效果,如果两者都不行,我们还有万能的onload把守最后一个关卡,确保加载成功事件能够触发。jquery源码中为了让IE更早的执行ready,还实现了用定时器不断检测window.doScroll是否存在,这种hack级别的实现不要也罢,其实也比onreadystatechange快不了多少。

不多说了,上代码:

function ready(fn) {

            function completed(){

                //清除所有的事件监听
if ( document.addEventListener ) {
document.removeEventListener( "DOMContentLoaded", arguments.callee, false );
window.removeEventListener( "load", arguments.callee, false );
} else {
document.detachEvent( "onreadystatechange", arguments.callee );
window.detachEvent( "onload", arguments.callee );
} fn();//执行回调 } if ( document.readyState === "complete" ) {
// 监听时页面已加载完,直接执行,模拟事件触发形式异步执行
setTimeout( completed );
// DOMContentLoaded 事件绑定
} else if ( document.addEventListener ) { //高级浏览器
document.addEventListener( "DOMContentLoaded", completed, false );
window.addEventListener( "load", completed, false ); // IE低版本
} else {
document.attachEvent( "onreadystatechange", function(e){
if (document.readyState != 'loading'){
completed(e);
}
} );
window.attachEvent( "onload", completed );
} } // 测试
ready(function(){
alert("load")
})

最新文章

  1. 基于Composer Player 模型加载和相关属性设置
  2. 在ASP.NET MVC 4 on Mono中使用OracleClient in CentOS 6.x的问题记录
  3. 如何查看SQL Server的版本、补丁包信息?以及如何鉴别是否需要升级自己的SQL Server?
  4. sqlite API模型
  5. 移除IIS默认的响应头
  6. wp8 入门到精通 LINQ to SQL
  7. Oracle 游标使用全解(转)
  8. 顺序容器的insert使用方法
  9. Intellij16创建Spring-Mybatis项目创(填)建(坑)记录,解决IDEA下找不到xml文件的问题
  10. OO Unit2多线程电梯总结博客
  11. 动态生成的dom元素如何绑定事件
  12. .net下的缓存技术
  13. (7)Microsoft office Word 2013版本操作入门_常用技巧
  14. jinfo
  15. #WEB安全基础 : HTTP协议 | 0x3 TCP三次握手和DNS服务
  16. 商业web漏扫神器——appscan篇
  17. Pandas Dataframe增、删、改、查、去重、抽样基本操作
  18. mysql插入数据时,去掉重复的数据;
  19. HDU 2199 Can you solve this equation?(二分精度)
  20. Xcode no visible @interface for XXX declares

热门文章

  1. docker原理学习-环境搭建
  2. 对iOS开发的一些认识
  3. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮
  4. 一、Servlet之14道面试题
  5. Servlet 3.0 新特性概述
  6. 禁用UpdateOrchestrator重新启动任务
  7. P1090 危险品装箱
  8. 51nod 1445:变色DNA 最短路变形
  9. Rabbitmq与spring整合之重要组件介绍——rabbitAdmin组件
  10. ssm web.xml文件解析