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