//5.jQuery的ready方法实现原理分析jQuery.ready.promise = function() { }; 监测dom的异步操作(内部使用)
//jQuery中的ready方法实现了当页面加载完成后才执行的效果
//,但他并不是window.onload或者doucment.onload的封装,
//而是使用 标准W3C浏览器DOM隐藏api和IE浏览器缺陷来完成的
jQuery.ready.promise = function(obj){ //检测DOM的异步操作
if(!readyList){
//$.Deferred() 是一个构造函数,用来返回一个链式实用对象方法来注册多个回调,并且调用回调队列,传递任何同步或异步功能成功或失败的状态。
readyList = jQuery.Deferred();//返回一个链式实用对象方法来注册多个回调
//表示页面已经加载完成,直接调用 ready方法
if(document.readyState ==="complete"){
//将 jQuery.ready压入异步消息队列,设置延迟时间1毫秒(注意,有些浏览器延迟不能小于4毫秒)
setTimeout(jQuery.ready);
}else{
//监听DOM加载完成
document.addEventListener( "DOMContentLoaded", completed, false );
//这里是为了确保所有ready执行结束,如果DOMContentLoaded方法执行了,将有一个状态值 isReady被设置为true,因此,
//ready方法一旦执行,那么将只执行一次,window.addEventListener中的ready 将被 return 中断
window.addEventListener( "load", completed, false );
}
}
return readyList.promise( obj );
}
//5.jQuery的ready方法实现原理分析jQuery.ready.promise = function() { }; 监测dom的异步操作(内部使用)
来源:CSDN
作者:chunchun1230
链接:https://blog.csdn.net/chunchun1230/article/details/104181554