【HTML5】DOMContentLoaded事件

这个事件是从HTML中的onLoad的延伸而来的,当一个页面完成加载时,初始化脚本的方法是使用load事件,但这个类函数的缺点是仅在所有资源都完全加载后才被触发,这有时会导致比较严重的延迟,开发人员随后创建了一种自定义事件,domready,它在DOM加载之后及资源加载之前被触发。

domready事件迅速被众多JavaScript库所采用,它开始在本地浏览器中以DOMContentLoaded的形式被使用;此外,它目前已在HTML5中被标准化,下面的代码显示了DOMContentLoaded是如何在document对象中被触发的;
  document.addeventListener('DOMContentLoaded',function(){...},false);


DOMContentLoaded 与 onload 的不同之处在于 DOMContentLoaded 发生在 DOM 加载完毕,但是图片等可能未加载完成的情况。DOMContentLoaded 被除IE外的浏览器支持。针对IE浏览器,也可以模拟这个事件,有两种方案 
1、 在页面加一个标签 

Html代码   收藏代码
  1. <script src="//:" defer />  

Html代码   收藏代码
  1. <script type="text/javascript">  
  2. //<![CDATA[ 
  3.   var $ = document.getElementById; 
  4.   var fireDOMReadyEvent = function () { 
  5.     alert('DOM content loaded'); 
  6.   } 
  7.   if (!!window.ActiveXObject) {  
  8.     // Internet Explorer use defer attribute 
  9.     var src = (window.location.protocol == 'https') ? '://0' : 'javascript:void(0)';  
  10.      document.write('<SCRIPT id=____dom_content_ready__ src="' + src + '" defer><\/script>');  
  11.      $('____dom_content_ready__').onreadystatechange = function() {  
  12.         if (this.readyState == 'complete') {  
  13.             this.onreadystatechange = null;  
  14.              fireDOMReadyEvent();  
  15.          }  
  16.      };  
  17.  }  
  18. //]]>  
  19. </script>  
  20.  <body>  
  21.     <img src="verybig.jpg">  
  22.  </body>  

然后检测该脚本的 onreadystatechange,如果为 complete 说明此时 DOM 加载完毕,即 DOMContentLoaded 事件发生。 用 Http watch 工具可以看到像早些版本的 JQuery 和 ExtJS 都会发这么一个请求。最后再删除这个标签即可。一般这个请求花费几毫秒时间。  
2、   通过setTiemout来不断的调用documentElement的doScroll方法,如果调用成功则相当 DOMContentLoaded 事件发生。  
Html代码   收藏代码
  1. <script type="text/javascript">  
  2. //<![CDATA[ 
  3.   var $ = document.getElementById; 
  4.   var fireDOMReadyEvent = function () { 
  5.     window.clearInterval(timer) 
  6.     alert('DOM content loaded'); 
  7.   } 
  8.   if (!!window.ActiveXObject) {  
  9.     // Using doScroll method to instead of script tag to deal with DOM content loaded event 
  10.     var timer = null; 
  11.     try { 
  12.       timer = setInterval(function () { 
  13.         document.body.doScroll('left'); 
  14.         fireDOMReadyEvent(); 
  15.       }); 
  16.     } catch(ex) {}; 
  17.  }  
  18. //]]>  
  19. </script>  
  20. <img src="verybig.jpg">  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值