解決js圖片加載時(shí)出現(xiàn)404的問題
運(yùn)營網(wǎng)站久了之后,無法避免會(huì)出現(xiàn)圖片404的情況,原因可能是圖片文件本來就不存在或目前不存在。常見的解決方案是將404圖片隱藏或者是替換為默認(rèn)的圖片。
img標(biāo)簽事件屬性
img標(biāo)簽可使用的時(shí)間屬性有:
onabort, onbeforeunload, onblur, onchange, onclick, oncontextmenu, ondblclick, ondrag, ondragend, ondragenter, ondragleave, ondragover, ondragstart, ondrop, onerror, onfocus, onkeydown, onkeypress, onkeyup, onload, onmessage, onmousedown, onmousemove, onmouseover, onmouseout, onmouseup, onmousewheel, onresize, onscroll, onselect, onsubmit, onunload
img標(biāo)簽常用的事件如下:
onerror:圖像加載過程中發(fā)生錯(cuò)誤時(shí)被觸發(fā)。
onabort:圖片加載的時(shí)候,用戶通過點(diǎn)擊停止加載時(shí)觸發(fā),通常在這里觸發(fā)一個(gè)提示:“圖片正在加載”。
onload:當(dāng)圖片加載完成之后觸發(fā)。
1. 對(duì)圖片監(jiān)聽onerror事件
<img src="someimage.png" onerror="imgError(this);" /> // 原生JS: function imgError(image){ // 隱藏圖片 image.style.display = 'none'; // 替換為默認(rèn)圖片 // document.getElementById("img").setAttribute("src", "images/demo.png"); } // 使用jQuery處理: function imgError(image){ $(image).hide(); // $(this).attr("src", "images/demo.png"); }
注意:需要將處理函數(shù)定義在head,防止圖片加載出錯(cuò)時(shí)沒有讀取到處理函數(shù)
2. 使用jQuery監(jiān)聽error
// 通常不會(huì)再HTML里面內(nèi)聯(lián)js,可以使用.error對(duì)圖片進(jìn)行監(jiān)聽處理 $('#test img').error(function() { $(this).hide(); // $(this).attr("src", "images/demo.png"); });
注意:jQuery加載需要在img前,處理函數(shù)需在img后
3. 使用函數(shù)處理
// 原生JS解決方案 function $id(id) { return !id || id.nodeType === 1 ? id : document.getElementById(id); } function isType(o, t) { return (typeof o).indexOf(t.charAt(0).toLowerCase()) === 0; } // 主要邏輯 function image(src, cfg) { var img, prop, target; cfg = cfg || (isType(src, 'o') ? src : {}); img = $id(src); if (img) { src = cfg.src || img.src; } else { img = document.createElement('img'); src = src || cfg.src; } if (!src) { return null; } prop = isType(img.naturalWidth,'u') ? 'width' : 'naturalWidth'; img.alt = cfg.alt || img.alt; // Add the image and insert if requested (must be on DOM to load or // pull from cache) img.src = src; target = $id(cfg.target); if (target) { target.insertBefore(img, $id(cfg.insertBefore) || null); } // Loaded? if (img.complete) { if (img[prop]) { if (isType(cfg.success,'f')) { cfg.success.call(img); } } else { if (isType(cfg.failure,'f')) { cfg.failure.call(img); } } } else { if (isType(cfg.success,'f')) { img.onload = cfg.success; } if (isType(cfg.failure,'f')) { img.onerror = cfg.failure; } } return img; }
以上函數(shù)有許多用處:
1. 獲取圖片信息:圖片是否可下載,圖片寬高
image('img',{ success : function () { alert(this.width + "-" + this.height); }, failure : function () { alert('image 404!'); }, }); // 驗(yàn)證資源是否下載 image('images/banner/banner_2.jpg', { success : function () {console.log('sucess')}, failure : function () {console.log('failure')}, target : 'myContainerId', insertBefore : 'someChildOfmyContainerId' });
2. 下載并插入圖片
var report = $id('report'), callback = { success : function () { report.innerHTML += '<p>Success - ' + this.src + ' ('+this.offsetWidth+'x'+this.offsetHeight+')</p>'; }, failure : function () { report.innerHTML += '<p>Failure - ' + this.src + ' ('+this.offsetWidth+'x'+this.offsetHeight+')</p>'; }, target : 'target' }; image('img', callback); image('images/banner/banner_2.jpg', callback);
以上就是js針對(duì)圖片加載時(shí)出現(xiàn)404問題的解決辦法,希望大家有所收獲。
- JS實(shí)現(xiàn)圖片預(yù)加載無需等待
- Jquery.LazyLoad.js修正版下載,實(shí)現(xiàn)圖片延遲加載插件
- JS判斷圖片是否加載完成方法匯總(最新版)
- javascript實(shí)現(xiàn)圖片延遲加載方法匯總(三種方法)
- jquery插件lazyload.js延遲加載圖片的使用方法
- js實(shí)現(xiàn)圖片在未加載完成前顯示加載中字樣
- 關(guān)于JS判斷圖片是否加載完成且獲取圖片寬度的方法
- JavaScript判斷圖片是否已經(jīng)加載完畢的方法匯總
- js或者jquery判斷圖片是否加載完成實(shí)現(xiàn)代碼
- JavaScript canvas實(shí)現(xiàn)加載圖片
相關(guān)文章
基于JavaScript實(shí)現(xiàn)圖片點(diǎn)擊彈出窗口而不是保存
這篇文章主要介紹了基于JavaScript實(shí)現(xiàn)圖片點(diǎn)擊彈出窗口而不是保存的相關(guān)資料,需要的朋友可以參考下2016-02-02詳解Webpack實(shí)戰(zhàn)之構(gòu)建 Electron 應(yīng)用
本篇文章主要介紹了Webpack實(shí)戰(zhàn)之構(gòu)建 Electron 應(yīng)用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-12-12js+css實(shí)現(xiàn)回到頂部按鈕(back to top)
這篇文章主要為大家詳細(xì)介紹了js+css實(shí)現(xiàn)回到頂部按鈕back to top回到頂部按鈕,感興趣的小伙伴們可以參考一下2016-03-03Bootstrap開關(guān)(switch)控件學(xué)習(xí)筆記分享
這篇文章主要為大家分享了Bootstrap開關(guān)(switch)控件學(xué)習(xí)筆記,介紹了Bootstrap開關(guān)(switch)控件的功能、使用說明,感興趣的小伙伴們可以參考一下2016-05-05JS如何將秒數(shù)轉(zhuǎn)化為時(shí)分秒的形式
在實(shí)際工作中經(jīng)常會(huì)遇見把秒數(shù)轉(zhuǎn)化為時(shí)分秒的問題,如何處理呢?下面這篇文章主要給大家介紹了關(guān)于JS如何將秒數(shù)轉(zhuǎn)化為時(shí)分秒形式的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12