国产人成视频在线观看,青青操视频在线观看国产,国产精品大秀视频日韩精品,人妻丰满熟妇岳av无码区hd

歡迎來到合肥浪訊網(wǎng)絡(luò)科技有限公司官網(wǎng)
  咨詢服務(wù)熱線:400-099-8848

如何判斷網(wǎng)頁圖片是否加載完成

發(fā)布時間:2026-05-24 文章來源:本站  瀏覽次數(shù):152

在網(wǎng)站性能優(yōu)化、圖片懶加載、CLS優(yōu)化、頁面動畫渲染等場景中,精準(zhǔn)判斷圖片是否加載完成是核心基礎(chǔ)操作。瀏覽器加載圖片存在加載中、加載成功、加載失敗、緩存讀取四種狀態(tài),普通延時判斷無法精準(zhǔn)識別,本文分享所有原生、可落地的圖片加載完成判斷方法,適配各類網(wǎng)站開發(fā)與優(yōu)化場景。

一、核心基礎(chǔ):圖片原生狀態(tài)屬性(無需延時、精準(zhǔn)判斷)

瀏覽器原生提供圖片專屬狀態(tài)屬性,可直接讀取圖片加載進度,是判斷圖片是否加載完成的基礎(chǔ)依據(jù)。

1. complete 屬性(核心判斷依據(jù))

img.complete 是布爾值屬性,專門用于判斷圖片是否加載完畢,涵蓋網(wǎng)絡(luò)加載、本地緩存加載所有場景。
返回 true:圖片加載完成(成功/加載失敗均判定為完成);
返回 false:圖片正在加載、未開始加載。
適用場景:即時檢測圖片加載狀態(tài)、懶加載狀態(tài)校驗、頁面初始化圖片檢測。
const img = document.querySelector('img'); if(img.complete){ console.log("圖片已加載完成"); }else{ console.log("圖片未加載完成/加載中"); }

2. naturalWidth / naturalHeight 原生尺寸判斷

圖片未加載完成時,原生真實寬高為 0;加載成功后會返回圖片真實像素尺寸,可精準(zhǔn)區(qū)分加載完成且加載成功,規(guī)避加載失敗誤判問題。
判定邏輯:naturalWidth > 0即為圖片正常加載完成。
const img = document.querySelector('img'); if(img.complete && img.naturalWidth > 0){ console.log("圖片加載成功且完成"); }else if(img.complete && img.naturalWidth === 0){ console.log("圖片加載完成但加載失。ㄆ茡p/404)"); }else{ console.log("圖片加載中"); }

二、事件監(jiān)聽法:實時監(jiān)聽圖片加載完成(最穩(wěn)定)

通過原生 load、error 事件監(jiān)聽圖片加載結(jié)果,可實時捕獲加載完成瞬間,支持動態(tài)圖片、懶加載圖片、異步加載圖片,適配絕大多數(shù)業(yè)務(wù)場景。

1. load 事件:圖片加載成功觸發(fā)

圖片(含緩存圖片)加載成功后立即觸發(fā),代表圖片資源完整加載、可正常渲染。

2. error 事件:圖片加載失敗觸發(fā)

圖片鏈接失效、資源損壞、加載超時、跨域失敗時觸發(fā),判定為加載異常完成。

完整標(biāo)準(zhǔn)代碼(兼容緩存+網(wǎng)絡(luò)加載)

const img = document.querySelector('img'); // 加載成功 img.onload = function(){ console.log("圖片加載完成:成功"); } // 加載失敗 img.onerror = function(){ console.log("圖片加載完成:失敗"); } // 兼容緩存圖片:部分緩存圖片不會觸發(fā)onload,需手動檢測狀態(tài) if(img.complete){ if(img.naturalWidth > 0){ console.log("緩存圖片已加載完成"); } }

三、批量判斷:頁面多張圖片全部加載完成

網(wǎng)站列表頁、詳情頁存在多張圖片時,需判斷所有圖片全部加載完成,常用于頁面加載動畫關(guān)閉、頁面渲染初始化、性能統(tǒng)計場景。
// 獲取頁面所有圖片 const allImg = document.querySelectorAll('img'); let loadCount = 0; const imgTotal = allImg.length; function checkAllLoad(){ loadCount++; if(loadCount === imgTotal){ console.log("頁面所有圖片全部加載完成"); // 執(zhí)行圖片加載完成后的業(yè)務(wù)邏輯 } } allImg.forEach(item => { // 已加載的緩存圖片直接計數(shù) if(item.complete){ checkAllLoad(); }else{ // 未加載圖片監(jiān)聽事件 item.onload = checkAllLoad; item.onerror = checkAllLoad; } })

四、背景圖加載完成判斷(CSS background 專屬)

頁面 Banner、模塊背景圖無法通過 img 標(biāo)簽屬性判斷,屬于特殊場景,需通過動態(tài)創(chuàng)建圖片對象監(jiān)聽加載狀態(tài)。
// 獲取背景圖地址 const bgDom = document.querySelector('.bg-box'); const bgUrl = getComputedStyle(bgDom).backgroundImage.slice(4,-1).replace(/"/g, ''); // 動態(tài)創(chuàng)建圖片監(jiān)聽加載 const bgImg = new Image(); bgImg.src = bgUrl; bgImg.onload = function(){ console.log("背景圖片加載完成"); } bgImg.onerror = function(){ console.log("背景圖片加載失敗"); }

五、懶加載圖片專屬判斷方案

開啟懶加載的圖片(loading="lazy" / JS懶加載),延遲加載特性會導(dǎo)致初始狀態(tài)檢測失效,需結(jié)合滾動監(jiān)聽+狀態(tài)屬性雙重判斷。
1. 可視區(qū)域內(nèi)的懶加載圖片:可直接通過 complete + naturalWidth 判斷;
2. 可視區(qū)域外的懶加載圖片:默認(rèn)未加載,complete 為 false;
3. 滾動觸發(fā)加載后,自動觸發(fā) onload 事件,可精準(zhǔn)捕獲加載完成狀態(tài)。

六、常見判斷誤區(qū)(重點避坑)

  • 誤區(qū)1:僅通過 complete 判斷加載成功。complete 為 true 僅代表加載流程結(jié)束,包含加載失敗、圖片破損場景,必須搭配 naturalWidth > 0 驗證有效加載;
  • 誤區(qū)2:使用定時器延時判斷。網(wǎng)絡(luò)波動、圖片大小不同,延時判斷精準(zhǔn)度極低,極易出現(xiàn)誤判;
  • 誤區(qū)3:忽略緩存圖片。緩存圖片不會重復(fù)觸發(fā) onload 事件,必須提前檢測 complete 狀態(tài);
  • 誤區(qū)4:背景圖用普通圖片屬性判斷。背景圖不屬于 img 標(biāo)簽,原生屬性無法識別,需動態(tài)創(chuàng)建圖片對象監(jiān)聽。

七、總結(jié):最優(yōu)判斷組合公式

單張圖片精準(zhǔn)判斷:complete + naturalWidth 雙重校驗
動態(tài)/異步圖片判斷:onload + onerror 事件監(jiān)聽
多張圖片批量判斷:遍歷檢測緩存狀態(tài) + 事件統(tǒng)計
CSS背景圖判斷:動態(tài)Image對象監(jiān)聽加載

上一條:網(wǎng)絡(luò)公司選擇空間時需要考...

下一條:網(wǎng)站圖片懶加載的優(yōu)缺點及...

龙口市| 驻马店市| 北安市| 松潘县| 滦平县| 临泽县| 青神县| 临泉县| 阳泉市| 宣汉县| 合川市| 孙吴县| 华蓥市| 商洛市| 铁岭市| 泰顺县| 玛多县| 泽州县| 顺平县| 且末县| 永和县| 乌拉特中旗| 永城市| 墨脱县| 壤塘县| 南川市| 慈溪市| 伊通| 峨眉山市| 社旗县| 高邑县| 邵阳县| 迁安市| 呼玛县| 武冈市| 崇礼县| 新余市| 思南县| 泽库县| 靖州| 福海县|