jq源码学习5_jQuery.ready.promise = function() { }; 监测dom的异步操作(内部使用)

//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的异步操作(内部使用)
发布了139 篇原创文章 · 获赞 27 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/chunchun1230/article/details/104181554
今日推荐