博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
原生JS实现document.ready以及和window.onload的先后顺序
阅读量:6318 次
发布时间:2019-06-22

本文共 2633 字,大约阅读时间需要 8 分钟。

jQuery 里面的文档就绪用法

jQuery里面,我们可以看到两种写法:
$(function(){})
$(document).ready(function(){})
这两个方法的效果都是一样的,都是在dom文档树加载完之后执行一个函数,
(注意,这里面的
ready
DOM树加载完成,不是
onload的页面资源加载完成的)。

document.ready方法

原生js本身并没有提供 document.ready方法

//document是一个DOM对象,这个对象本身没有ready方法,要使用就得自己定义,而且过程颇为复杂//其中一种方法是:document.ready = function (callback) {            ///兼容FF,Google            if (document.addEventListener) {                document.addEventListener('DOMContentLoaded', function () {                    document.removeEventListener('DOMContentLoaded', arguments.callee, false);                    callback();                }, false)            }             //兼容IE            else if (document.attachEvent) {                document.attachEvent('onreadystatechange', function () {                      if (document.readyState == "complete") {                                document.detachEvent("onreadystatechange", arguments.callee);                                callback();                       }                })            }            else if (document.lastChild == document.body) {                callback();            }        }//还有一种方法是:(function () {    var ie = !!(window.attachEvent && !window.opera);    var wk = /webkit\/(\d+)/i.test(navigator.userAgent) && (RegExp.$1 < 525);    var fn = [];    var run = function () { for (var i = 0; i < fn.length; i++) fn[i](); };    var d = document;    d.ready = function (f) {      if (!ie && !wk && d.addEventListener)        return d.addEventListener('DOMContentLoaded', f, false);      if (fn.push(f) > 1) return;      if (ie)        (function () {          try { d.documentElement.doScroll('left'); run(); }          catch (err) { setTimeout(arguments.callee, 0); }        })();      else if (wk)        var t = setInterval(function () {          if (/^(loaded|complete)$/.test(d.readyState))            clearInterval(t), run();        }, 0);    };    })();//实际使用的时候,上面两种方法选一个即可使用 document.ready( function(){} );//结论是原生js本身并没有提供 document.ready方法

window.onload 在没定义方法之前,它只是一个值为null的属性

//控制台打印一下window,看看onload是什么东东window//other...onlanguagechange:nullonload:nullonloadeddata:null//other...//可以看到window的onload属性的值是null//window.onload = function() {//code...}//在使用的时候:先使用函数表达式的方式给它定义函数,很容易犯错的是 将它当作函数直接使用。

document.readywindow.onload 的区别是:

上面定义的document.ready方法在DOM树加载完成后就会执行,而window.onload是在页面资源(比如图片和媒体资源,它们的加载速度远慢于DOM的加载速度)加载完成之后才执行。也就是说$(document).ready要比window.onload先执行。

验证一下 ready 要比 onload 先执行:

window.onload = function () {            alert('onload');        };        document.ready(function () {            alert('ready');        });
执行这段代码之后,你会看到浏览器里面会先弹出
ready,在弹出
onload

转载地址:http://pyuaa.baihongyu.com/

你可能感兴趣的文章
大数据风控时代下好车贷等互联网金融平台有哪些特点
查看>>
如何用深度学习推荐电影?教你做自己的推荐系统!
查看>>
英特尔澄清:第一款10nm产品2017年定发布
查看>>
《Android智能穿戴设备开发指南》——第6章,第6.2节使用TCP协议传输数据
查看>>
《Ansible权威指南》一2.7 本章小结
查看>>
一些重要 Docker 命令的简单介绍
查看>>
微服务,微架构[六]之springboot集成mybatis
查看>>
RDS SQL Server - 专题分享 - 巧用执行计划缓存之索引缺失
查看>>
诺奖得主Wilczek:人工智能正在解放我们的大脑
查看>>
C++实践参考——分数类中的运算符重载
查看>>
如何从开发环境直连线上(IPTables)
查看>>
setContentView是如何一步一步被显示出来的?
查看>>
电脑重装计划
查看>>
【肥朝】从JDK中,我们能学到哪些设计模式?
查看>>
RecyclerView综合案例库和系列博客
查看>>
TensorFlow Build from Source for macOS
查看>>
ES5和ES6中对继承的实现
查看>>
Introducting To Siri Shortcuts
查看>>
阻塞同步 异步
查看>>
小程序分页加载
查看>>