img 圖片異常處理

原地址:??https://juejin.im/post/5d3e4304f265da1b8608cee5
個人覺得很有用處? 所以記錄在自己的博客里? 留有后用

JS監(jiān)聽圖片的 error 事件

<img id="img" src="http://xxx.xxx.xxx/img.png">

let img = document.getElementById('img');

img.addEventListener('error',function(e){

? ? e.target.src = '//xxx.xxx.xxx/default.png'; // 為當前圖片設定默認圖

})

這樣不利于處理大量圖片的情況


內聯(lián)方式監(jiān)聽圖片的 error 事件

<img src="http://xxx.xxx.xxx/img.png" onerror="this.src = '//xxx.xxx.xxx/default.png'">


通過全局監(jiān)聽 error 事件

window.addEventListener('error',function(e){

? ? // 當前異常是由圖片加載異常引起的

? ? if( e.target.tagName.toUpperCase() === 'IMG' ){

? ? ? ? e.target.src = '//xxx.xxx.xxx/default.jpg';

? ? }

},true)

當網(wǎng)絡環(huán)境很差的時候 可以設置一個計數(shù)器? 當達到期望次數(shù)? 改為提供一個Base64的圖片

window.addEventListener('error',function(e){

? ? let target = e.target, // 當前dom節(jié)點

? ? ? ? tagName = target.tagName,

? ? ? ? times = Number(target.dataset.times) || 0, // 以失敗的次數(shù),默認為0

? ? ? ? allTimes = 3; // 總失敗次數(shù),此時設定為3

? ? // 當前異常是由圖片加載異常引起的

? ? if( tagName.toUpperCase() === 'IMG' ){

? ? ? ? if(times >= allTimes){

? ? ? ? ? ? target.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';

? ? ? ? }else{

? ? ? ? ? ? target.dataset.times = times + 1;

? ? ? ? ? ? target.src = '//xxx.xxx.xxx/default.jpg';

? ? ? ? }

? ? }

},true)

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容