JS通過onerror判斷圖片是否存在,如果不存在,則替換為指定的默認圖片
情景分析:有時朴译,img標簽中的src圖片加載失敗,原來的圖片位置會出現(xiàn)一個碎片圖標属铁,用戶體驗會下降眠寿。
.headLogo img{
display: block;
width: 270px;
height: 60px;
background: url(../images/logo.png) no-repeat 0 0;
margin: 25px 0;
}
同時我們想去除載入圖片失敗時顯示在左上角的碎片圖標盯拱,這個要借用img標簽的onerror事件和javascript,img標簽支持onerror 事件例嘱,在裝載文檔或圖像的過程中如果發(fā)生了錯誤狡逢,就會觸發(fā)onerror事件∑绰眩可以使用一張?zhí)崾惧e誤的圖片代替顯示不了的圖片奢浑。代碼如下:
<img src="images/logo.png" onerror=javascript:this.src="/img/logoError.png">
當圖片不存在時,將觸發(fā) onerror腋腮,而 onerror 中又為 img 指定一個logoError.png圖片雀彼。也就是說圖片存在則顯示logo.png,圖片不存在將顯示logoError.png低葫。
但問題來了详羡,如果logoError.png也不存在,則繼續(xù)觸發(fā) onerror嘿悬,導致循環(huán)实柠,故會出現(xiàn)打開網(wǎng)頁時提示 Stack overflow at line: 0錯誤。特別說明:如果圖片存在善涨,但網(wǎng)絡很不通暢窒盐,也可能觸發(fā) onerror草则。
解決方法:
第一種:去掉 onerror 代碼;或者更改 onerror 代碼為其它蟹漓;或者確保 onerror 中的圖片足夠小炕横,并且容易加載而存在。
第二種:控制它不循環(huán)葡粒,代碼如下:
<script type="text/javascript">
function nofind(){
var img=event.srcElement;
img.src="images/logoError.png";
img.onerror=null; 控制不要一直跳動
}
</script>
<img src="images/logo.png" onerror="nofind();" />