jq方法中 $(window).load() 與 $(document).ready() 的區別


  通過自學進入了前端的行列,只知道在js中,一開頭就寫一個:

window.onload = function(){ //doing sth}

  然后所有的亂七八糟的代碼全塞里面,大概知道window.onload就是等頁面全加載后再執行,具體細節不知。

 

  今天做項目時遇到一個問題,用的是jq,簡單的道理是通過動態獲取圖片的高度(因為是手機端,寬高是自適應的),來調整圖片下面main_body的top值(因為圖片跟mian_body有需要拼接的地方),代碼如下:

$(function(){
	var img_h = $(".ban").height();//ban的樣式給的是一張圖片
	$(".main_body").css({"top":img_h / 1.5});
	console.log(img_h);//查看讀取的高度
	})

  可發現,會出現獲取的圖片的高度為0的情況出現,想到可能會是圖片還未加載完畢,jq代碼就已經執行了。

  於是網上查找了下$(document).ready()與$(window).load(). 發現好多好的博客文章,分享大家,感謝博主辛苦寫博分享。

  http://www.jb51.net/article/59154.htm 

  http://www.jb51.net/article/86155.htm

 

  簡單說:ready()方法 是針對dom結構加載完觸發,我的理解是就是標簽全部加載之后(不對請批評指正);

      load()方法 是需要頁面完全加載完成才可以觸發,所謂的完全加載完,不僅僅是dom結構加載完,還需要所有的鏈接引用都加載完才可以。比如頁面中有大量圖片,必須等每一個圖片都加載完成,才叫完全加載完。

以下轉別人的文字:

------------------------------------------------------------------------------------

  先說load,load事件主要就是用來代替原生的window.onload,它只能用在兩個場景下:

  · window對象上。比如$(window).load(fn);。

  · 帶有URL的元素(images, scripts, frames, iframes)。比如$(“img”).load(fn);。

  除此之外,任何元素都沒有load事件,比如:$(document).load(fn);這是錯誤的寫法,根本不會執行。

  load事件需要頁面完全加載完成才可以觸發,所謂的完全加載完,不僅僅是dom結構加載完,還需要所有的鏈接引用都加載完才可以。比如頁面中有大量圖片,必須等每一個圖片都加載完成,才叫完全加載完。

  最重要的還沒說,jQuery官方文檔明確說明load事件的跨瀏覽器兼容性很差(It doesn't work consistently nor reliably cross-browser)。經過小菜測試,谷歌瀏覽器僅僅支持$(window).load(fn);,而火狐瀏覽器支持$(window).load(fn);和$(“img”).load(fn);。

  所以,除非必要情況下,否則強烈不推薦使用load事件。

  最后說說ready,ready事件可以加在任意元素上,比如$(window).ready(fn);、$(document).ready(fn);、$(“div”).ready(fn);等等。

  ready事件不要求頁面完全加載完,只需要加載完dom結構即可觸發。

------------------------------------------------------------------------------------

  於是我將原來的代碼改動如下:

  $(window).load(function(){
        var img_h = $(".ban").height();//ban的樣式給的是一張圖片
     $(".main_body").css({"top":(img_h * 362 / 415)});
      console.log(img_h);
  })

  試了很多次,不會出現獲取不到高度的情況了;

  猜想以下的代碼也可以(未測試):

 $('.ban').load(function(){
        var img_h = $(".ban").height();//ban的樣式給的是一張圖片
     $(".main_body").css({"top":(img_h * 362 / 415)}); 
      console.log(img_h); 
  })

  

  他人博客上說少用.load()事件,那看來獲取圖片高度盡量少用,以后再研究這些情況。

  

  document與window的細節還需要深研究。為自己加油

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM