window.onload与$(document).ready()的区别
对于很多初学者来说,window.onload出现在代码中的频率非常高,这似乎变成了一种习惯,可是并不知道具体为什么要加这句代码,可以做几个试验对比:
实验一:
<script>
document.getElementById("me").style.color = "blue";
</script>
<body>
<h1>大宝章 is Double Zhang</h1>
</body>
实验结果是 h1字体为原始黑色,并没有被渲染为蓝色,原因是document文档是从上向下解析执行,当执行到script时,body中的h1还未被执行和加载到网页中,这时候 document.getElementById("me") 并没有获取到h1对象,就更不存在将它的字体设置为蓝色了。
------------------------------------------------------------------------------------------------------------
实验二:
<body>
<script>
document.getElementById("me").style.color = "blue";
</script>
<h1>大宝章 is Double Zhang</h1>
</body>
实验结果字体为原始的黑色,可以很好的解释“document文档是从上向下解析执行”,当执行script时,h1仍旧没有被加载。
------------------------------------------------------------------------------------------------------------
实验三:
<body>
<h1>大宝章 is Double Zhang</h1>
<script>
document.getElementById("me").style.color = "blue";
</script>
</body>
实验结果字体为蓝色,终于渲染成功,从上而下万年不变的真理啊。
------------------------------------------------------------------------------------------------------------
实验四:
<script>
window.onload = function(){
document.getElementById("me").style.color = "blue";
}
</script>
<body>
<h1>大宝章 is Double Zhang</h1>
</body>
相比实验一添加了神器window.onload,字体为蓝色。这里有必要解释一下window.onload了,它表示网页完成了加载,包括DOM树的创建、网页中图片等外部资源的加载。window.onload=function(){这里的代码将在网页加载完成以后执行},这就是为什么实验四能够成功渲染蓝色字体,因为body里的内容已经加载完成,h1已经存在,才执行了颜色设置。
这里有一个隐患,当页面中需要加载的文件非常多(如图片),window.onload里面的代码就迟迟无法执行,将带来很差的用户体验。
------------------------------------------------------------------------------------------------------------
实验五:
<script>
setTimeout(function(){
document.getElementById("me").style.color = "blue";
},3000);
</script>
<body>
<h1>大宝章 is Double Zhang</h1>
</body>
字体成功渲染为蓝色,,因为做了一个定时器的延时3秒,在这3秒里,页面完成了加载工作,h1已经建立好,再添加颜色就没问题了,但是运行会看到字体会闪一下,闪之前为黑色,闪之后变为红色,因为页面刚加载好,h1默认呈现黑色,三秒时变为红色。
这也是一种方法,但是我们并不提倡,因为我们无法把握页面加载完成的准确时间,就意味着我们不能避免“闪一下”的问题,并且,setTimeout设置的延迟时间如果小于页面加载的时间,字体也不会渲染为蓝色。
-----------------------------------------------------------------------------------------------
实验六:
<script>
$(document).ready(function(){
document.getElementById("me").style.color = "blue";
});
</script>
<body>
<h1>大宝章 is Double Zhang</h1>
</body>
字体成功渲染蓝色!wuli jQuery的ready方法,就是在DOM树创建完成后(HTML解析的第一步)就触发,无需等待页面中其他资源(图片等)的加载,成功解决了实验四中的隐患。
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/64880.html
- 上一篇:c# 强制退出程序
- 下一篇:delphi 访问 protected 属性 哈哈