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

烈酒焚心 提交于 2020-02-06 07:57:41
//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的异步操作(内部使用)

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!