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的異步操作(內部使用)

 

發佈了133 篇原創文章 · 獲贊 27 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章