热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

怎样提取jQuery.ready(),DOM加载完毕执行onDOMReady()方法

在大部分中,需要在树载入时马上执行一些函数,但又不愿意仅为了这一个需求而引入整个库,于是就把jQuery的方法提取出来,单独使用了。当然大

在大部分中,需要在树载入时马上执行一些函数,但又不愿意仅为了这一个需求而引入整个库,于是就把jQuery的方法提取出来,单独使用了。

当然大家可以使用windows.onload事件, 但onload在看来,就是页面上的东西(img,iframe等资源)全部都加载完毕后才能发生,

如果页面内有大的图片的话,会在页面展现后好久时间后才执行。

如果只需要对DOM进行操作,那么这时就没必要等到页面全部加载了。我们需要更快的方法。

Firefox有DOMContentLoaded事件可以轻松解决,可惜的就是IE没有。

MSDN关于JSCRIPT的一个方法有段不起眼的话,当页面DOM未加载完成时,调用doScroll方法时,会产生异常。

那么我们反过来用,如果不异常,那么就是页面DOM加载完毕了!

所以 对于Mozilla & Opera 浏览器,在dom树载入后有现成的 DOMContentLoaded 事件

对于Safari 浏览器,有document.onreadystatechange事件,

当该触发时,如果 document.readyState=complete时,可视为dom树已经载入

对于ie,当在iframe内时,同样有document.onreadystatechange事件,

对于ie在非iframe内时,只有不断地通过能否执行doScroll判断dom是否加载完毕。

在本例中每间隔5毫秒尝试去执行 document.documentElement.doScroll('left')

另外要注意一点:PDF目录在ie8下,貌视非iframe窗口也会有document.onreadystatechange事件,另外你也可以在构建自己的框架时使用此函数

 

01(function(){
02var isReady=false; //判断onDOMReady方法是否已经被执行过
03var readyList= [];//把需要执行的方法先暂存在这个数组里
04var timer;//定时器句柄
05ready=function(fn) {
06if (isReady )
07fn.call( document);
08else
09readyList.push( function() { return fn.call(this);});
10return this;
11}
12var onDOMReady=function(){
13for(var i=0;i
14readyList[i].apply(document);
15}
16readyList = null;
17}
18var bindReady = function(evt){
19if(isReady) return;
20isReady=true;
21onDOMReady.call(window);
22if(document.removeEventListener){
23document.removeEventListener("DOMContentLoaded", bindReady, false);
24}else if(document.attachEvent){
25document.detachEvent("onreadystatechange", bindReady);
26if(window == window.top){
27clearInterval(timer);
28timer = null;
29}
30}
31};
32if(document.addEventListener){
33document.addEventListener("DOMContentLoaded", bindReady, false);
34}else if(document.attachEvent){
35document.attachEvent("onreadystatechange", function(){
36if((/loaded|complete/).test(document.readyState))
37bindReady();
38});
39if(window == window.top){
40timer = setInterval(function(){
41try{
42isReady||document.documentElement.doScroll('left');//在IE下用能否执行doScroll判断 dom是否加载完毕
43}catch(e){
44return;
45}
46bindReady();
47},5);
48}
49}
50})();
使用方法如下:

1ready(dosomething);//dosomething为已存在的函数
2//也可以通过闭包来使用
3ready(function(){
4//这里是逻辑代码
5});


转:https://www.cnblogs.com/aspxnets/archive/2011/06/19/2084521.html



推荐阅读
  • 理解浏览器历史记录(2)hashchange、pushState
    阅读目录1.hashchange2.pushState本文也是一篇基础文章。继上文之后,本打算去研究pushState,偶然在一些信息中发现了锚点变 ... [详细]
  • 高效的JavaScript异步资源加载解决方案
    本文探讨了如何通过异步加载技术处理网页中大型第三方插件的加载问题,避免将大文件打包进主JS文件中导致的加载时间过长,介绍了实现异步加载的具体方法及其优化。 ... [详细]
  • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
  • JavaScript 跨域解决方案详解
    本文详细介绍了JavaScript在不同域之间进行数据传输或通信的技术,包括使用JSONP、修改document.domain、利用window.name以及HTML5的postMessage方法等跨域解决方案。 ... [详细]
  • 本文探讨了移动操作系统中应用程序生命周期的概念,并深入分析了 Windows Phone 7 中独特的 Tombstoning 机制,该机制旨在优化资源利用,提升用户体验。 ... [详细]
  • 本文总结了在多人协作开发环境中使用 Git 时常见的问题及其解决方案,包括错误合并分支的处理、使用 SourceTree 查找问题提交、Git 自动生成的提交信息解释、删除远程仓库文件夹而不删除本地文件的方法、合并冲突时的注意事项以及如何将多个提交合并为一个。 ... [详细]
  • 本文介绍了如何在React应用中实现延迟加载以提高性能,以及如何利用自定义Hook和高阶组件(HOC)来增强组件功能。通过这些技术,开发者可以构建更加高效和可维护的应用。 ... [详细]
  • 本文介绍了如何使用 Python 的 Pyglet 库加载并显示图像。Pyglet 是一个用于开发图形用户界面应用的强大工具,特别适用于游戏和多媒体项目。 ... [详细]
  • 笔记说明重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系& ... [详细]
  • 视觉Transformer综述
    本文综述了视觉Transformer在计算机视觉领域的应用,从原始Transformer出发,详细介绍了其在图像分类、目标检测和图像分割等任务中的最新进展。文章不仅涵盖了基础的Transformer架构,还深入探讨了各类增强版Transformer模型的设计思路和技术细节。 ... [详细]
  • 探讨了在HTML表单中使用元素代替进行表单提交的方法。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • publicclassBindActionextendsActionSupport{privateStringproString;privateStringcitString; ... [详细]
  • 本文详细介绍了JQuery Mobile框架中特有的事件和方法,帮助开发者更好地理解和应用这些特性,提升移动Web开发的效率。 ... [详细]
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
author-avatar
zoey小
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有