4 回答

TA貢獻1123條經驗 獲得超629個贊
image沒加載完顯然算不了offsetWidth啊
imgs[0].onload=function(){???? ????var?imgWidth?=?imgs[0].offsetWidth; ????console.log(imgWidth); }

TA貢獻2條經驗 獲得超1個贊
這問題你得分清兩個問題,一個是DOM加載完成和一個是頁面元素加載完成.
順序執行這一點你是明白的,所以考慮到把JS放在了后面.但代碼執行的順序中,它只是按逐序去讀取標簽,而不會等待標簽內的元素是否加載完成.用圖片來舉例,從上到下執行到img的時候,它讀到img標簽后發送一個獲取圖片的動作后就懶得再管了,它不會管圖片是否加載完成,它會直接去讀下一個標簽.
因為標簽讀取的幾乎就是一瞬間,所以很快就讀到了下面的JS段并開始執行JS代碼,而這個時候img中的圖片還沒顯示完成.
所以就出現了一個問題,JS代碼中需要獲取的那個img,是有的,但如果JS要獲取的是圖片屬性,圖片都沒加載完,去哪找屬性?
所以,此時JS是得不到IMG的offsetWidth的. ? 而且從這段代碼來講,獲取offsetWidth;只執行了一次,除非撞大運,緩存里有這張圖,否則就根本獲取不了.
所以才要加上window.onload(),這是告訴瀏覽器,這段JS不要急著執行,等你把所有頁面元素(包括圖片)都加載完成了之后,我再執行.這個時候獲取offsetWidth就沒問題了.

TA貢獻3593條經驗 獲得超0個贊

TA貢獻204條經驗 獲得超92個贊
只能說還沒完全渲染完頁面吧,元素是都獲取到了,比如讓你在樣式標簽那給圖片設置width,最后是可以console出來寬度的,這種渲染機制問題不用太深入了...望采納
添加回答
舉報