jQuery中的ready方法實現了當頁面載入完成後才執行的效果,但他並不是window.onload或doucment.onload的封裝,而是使用標準W3C瀏覽器DOM隱藏api和IE瀏覽器缺陷來完成的,首先,我們來看jQuery的程式碼
jQuery.ready.promise = function( obj ) {
if ( !readyList ) {
readyList = jQuery.Deferred();
//表示頁面已載入完成,直接呼叫 ready方法 if ( document.readyState === "complete" ) {
//將 jQuery.ready壓入非同步訊息佇列,設定延遲時間1毫秒(請注意,有些瀏覽器延遲不能小於4毫秒)
}
else if ( document.addEventListener ) // {
//監聽DOM載入完成 document.addEventListener( "DOMContentLoaded", DOMentLoaded, false )
} else {
//低版本的IE瀏覽器 document.attachEvent( "onreadystatechange", DOMContentLoaded )
;
window.attachEvent( "onload", jQuery.ready );
var top = false;
try {
top = window.frameElement == null && document.documentElement;
} catch(e) {}
if ( top && top.doScroll ) //剔除iframe的成分 {
(function doScrollCheck() {
if ( !jQuery.isReady ) {
try {
//使用錯誤與低版本的IE
} catch(e) {
//因低版本的IE 瀏覽器,onreadystate return setTimeout( doScrollCheck, 50 );
}
jQuery.ready();
}
})();
}
}
}
return readyList.promise( obj );
};
頁載入完成有兩種事件,一是ready,表示文件結構已經載入完成(不包含圖片等非文字媒體檔案),二是onload,指示頁麵包含圖片等檔案在內的所有元素都載入完成。 (可以說:ready 在onload 前加載!!!)
一般樣式控制的,例如圖片大小控制放在onload 裡面載入;
jS事件觸發的方法,可以在ready 裡面載入;