$(document).ready() 與window.onload的區別

     最近項目中要做一個消息提醒功能,用戶登錄完成後,從右下角滑出一個消息模塊,類似qq彈出的廣告,不過是在瀏覽器中的,更大了一些而已。
     開始的做法是在$(document).ready()中使用的是jQuery的slideDown展示消息div,由於頁面裏面有六七個塊是iframe,每個iframe加載時間都比較長,內容也比較多,結果iframe沒加載完,消息div就出來了,而且動畫一卡卡的,效果實在無法忍受。
     後來在jQuery官網上的一片文章http://learn.jquery.com/about-jquery/how-jquery-works/發現jQuery的$(document).ready()不是等頁面全部加載完再執行的,而是當前頁面的dom加載完畢後就執行了,這樣效率很高,速度也快。不過要想等頁面全部加載完,包括內部的iframe都加載完再執行,就還要使用window.onload事件了,下面說說window.onload和$(document).ready()兩者的區別。
     主要是執行時間不同,上面也說了window.onload必須等到頁面內包括圖片,iframe等所有元素加載完畢後才能執行,而$(document).ready()是DOM結構繪製完畢後就執行,不必等到加載完畢,也就是說執行時可能圖片還沒下載完成,iframe內容沒加載完畢等。
     兩者的執行時間不同,作用也不同,絕大部分情況下$(document).ready()的作用要好一些,但是要注意的是因爲$(document).ready()執行時可能圖片等內容沒加載完,要想獲取圖片尺寸這類屬性不一定有效。但是等全部頁面都加載完再獲取某個圖片的尺寸,又浪費了時間,怎麼辦呢?好在jQuery給我們提供了一個更好的辦法,可以使用load方法給指定元素綁定加載完成時的事件,如$("img").load(function(){……});
     load方法還有一個好處,如果單純的寫window.onload註冊事件的話只會執行最後一個,如果要註冊多個,需要額外的代碼來判斷,而使用jQuery的load方法可以註冊多個事件,$(window).load()和window.onload是等效的,但是load方法可以註冊多個事件。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章