jQuery源码学习(8)——ready模块
使用jQuery库时,通常会使用ready函数。jQuery的ready函数不同与window.onload,如果你测试一下就会发现。
window.onload是在所有资源都加载完成时候触发,当资源比较大,比如图片文件较多的时候,window.onload的触发就会延迟很多,
影响用户体验。
jQuery.ready是在页面准备好之后就会触发,会先于window.onload事件。
jQuery是如何实现这个过程的呢?看完ready模块就明白了。
document.readyState 和 DOMContentLoaded
jQuery 借助document.readyState 与 DOMContentLoaded事件来实现ready函数。
当document.readyState=”complete” 的时候,DOM已经准备好了。但是,当页面加载二进制文件的时候如图片,会让这个事件慢于load事件。
使用document.readyState=”complete”只能做为一种参考,还必须提供额外的方法。(注:如果采用检测readyState = “interactive”会有bugChrisS discovered bug)
最保险的是使用DOMContentLoaded事件让判断,但是有的浏览器可能会不支持。所以使用load事件作为兼容。
代码如下:
当完成DOMContentLoaded调用completed
方法,completed
中调用jQuery.ready()
实现事件触发。
ready模块中使用了deferred对象,可以很方便的实现回调。
ready中有个holdReady
方法,这个方法可以释放或者保持ready函数。就是释放的时候不会监听事件也会触发ready方法。
jQuery.ready中判断是否可以触发ready事件: