咨詢服務(wù)熱線:400-099-8848
如何判斷網(wǎng)頁(yè)圖片是否加載完成 |
| 發(fā)布時(shí)間:2026-05-24 文章來(lái)源:本站 瀏覽次數(shù):156 |
在網(wǎng)站性能優(yōu)化、圖片懶加載、CLS優(yōu)化、頁(yè)面動(dòng)畫(huà)渲染等場(chǎng)景中,精準(zhǔn)判斷圖片是否加載完成是核心基礎(chǔ)操作。瀏覽器加載圖片存在加載中、加載成功、加載失敗、緩存讀取四種狀態(tài),普通延時(shí)判斷無(wú)法精準(zhǔn)識(shí)別,本文分享所有原生、可落地的圖片加載完成判斷方法,適配各類網(wǎng)站開(kāi)發(fā)與優(yōu)化場(chǎng)景。
一、核心基礎(chǔ):圖片原生狀態(tài)屬性(無(wú)需延時(shí)、精準(zhǔn)判斷)瀏覽器原生提供圖片專屬狀態(tài)屬性,可直接讀取圖片加載進(jìn)度,是判斷圖片是否加載完成的基礎(chǔ)依據(jù)。
1. complete 屬性(核心判斷依據(jù))img.complete 是布爾值屬性,專門(mén)用于判斷圖片是否加載完畢,涵蓋網(wǎng)絡(luò)加載、本地緩存加載所有場(chǎng)景。返回 true:圖片加載完成(成功/加載失敗均判定為完成);
返回 false:圖片正在加載、未開(kāi)始加載。
適用場(chǎng)景:即時(shí)檢測(cè)圖片加載狀態(tài)、懶加載狀態(tài)校驗(yàn)、頁(yè)面初始化圖片檢測(cè)。
2. naturalWidth / naturalHeight 原生尺寸判斷圖片未加載完成時(shí),原生真實(shí)寬高為 0;加載成功后會(huì)返回圖片真實(shí)像素尺寸,可精準(zhǔn)區(qū)分加載完成且加載成功,規(guī)避加載失敗誤判問(wèn)題。
判定邏輯:
naturalWidth > 0即為圖片正常加載完成。
二、事件監(jiān)聽(tīng)法:實(shí)時(shí)監(jiān)聽(tīng)圖片加載完成(最穩(wěn)定)通過(guò)原生 load、error 事件監(jiān)聽(tīng)圖片加載結(jié)果,可實(shí)時(shí)捕獲加載完成瞬間,支持動(dòng)態(tài)圖片、懶加載圖片、異步加載圖片,適配絕大多數(shù)業(yè)務(wù)場(chǎng)景。
1. load 事件:圖片加載成功觸發(fā)圖片(含緩存圖片)加載成功后立即觸發(fā),代表圖片資源完整加載、可正常渲染。
2. error 事件:圖片加載失敗觸發(fā)圖片鏈接失效、資源損壞、加載超時(shí)、跨域失敗時(shí)觸發(fā),判定為加載異常完成。
完整標(biāo)準(zhǔn)代碼(兼容緩存+網(wǎng)絡(luò)加載)
三、批量判斷:頁(yè)面多張圖片全部加載完成網(wǎng)站列表頁(yè)、詳情頁(yè)存在多張圖片時(shí),需判斷所有圖片全部加載完成,常用于頁(yè)面加載動(dòng)畫(huà)關(guān)閉、頁(yè)面渲染初始化、性能統(tǒng)計(jì)場(chǎng)景。
四、背景圖加載完成判斷(CSS background 專屬)頁(yè)面 Banner、模塊背景圖無(wú)法通過(guò) img 標(biāo)簽屬性判斷,屬于特殊場(chǎng)景,需通過(guò)動(dòng)態(tài)創(chuàng)建圖片對(duì)象監(jiān)聽(tīng)加載狀態(tài)。
五、懶加載圖片專屬判斷方案開(kāi)啟懶加載的圖片(loading="lazy" / JS懶加載),延遲加載特性會(huì)導(dǎo)致初始狀態(tài)檢測(cè)失效,需結(jié)合滾動(dòng)監(jiān)聽(tīng)+狀態(tài)屬性雙重判斷。
1. 可視區(qū)域內(nèi)的懶加載圖片:可直接通過(guò) complete + naturalWidth 判斷;
2. 可視區(qū)域外的懶加載圖片:默認(rèn)未加載,complete 為 false;
3. 滾動(dòng)觸發(fā)加載后,自動(dòng)觸發(fā) onload 事件,可精準(zhǔn)捕獲加載完成狀態(tài)。
六、常見(jiàn)判斷誤區(qū)(重點(diǎn)避坑)
七、總結(jié):最優(yōu)判斷組合公式單張圖片精準(zhǔn)判斷:complete + naturalWidth 雙重校驗(yàn)
動(dòng)態(tài)/異步圖片判斷:onload + onerror 事件監(jiān)聽(tīng)
多張圖片批量判斷:遍歷檢測(cè)緩存狀態(tài) + 事件統(tǒng)計(jì)
CSS背景圖判斷:動(dòng)態(tài)Image對(duì)象監(jiān)聽(tīng)加載
|
|