有时,img标签中的src图片加载失败,原来的图片位置会出现一个碎片图标。
这样是不是看着很不舒服呢。
那怎么让这个碎片图标变得好看些呢,这是我今天要讨论的问题。
可以借用img标签的onerror事件,img标签支持onerror 事件,在装载文档或图像的过程中如果发生了错误,就会触发onerror事件。可以使用一张提示错误的图片代替显示不了的图片。
<img src="images/logo.png" onerror="javascript:this.src='http://oss.yohn-z.cn/myblog/noimg/github/github-nopig.png';">
当图片images/logo.png不存在时,将触发 onerror事件,而 onerror 中又为该 img 指定了替代的图片。
但是,这种方法并不推荐使用!
当images/logoError.png 也不存在,则会继续触发 onerror事件,导致死循环,故会出现打开网页时提示 Stack overflow at line: 0 错误。特别说明:如果图片存在,但网络很不通畅,也可能触发 onerror事件。
解决方法(代码):
<script type="text/javascript">
function imgerrorfunc(){
let img = event.srcElement;
img.src = "替代的图片.png";
img.onerror = null;
}
</script>
<img src="images/logo.png" onerror="imgerrorfunc();" />
当然你可以这样
<img src="" onerror="this.src='javascript:test.png';this.onerror='null';">
也可以直接隐藏
<img src="" onerror="this.style.display = 'none';">
同时贴出我测试的另外一种解决方案:
<script>
function imgExists(e){
//默认图片
var imgUrl = "http://oss.yohn-z.cn/myblog/assets/images/avatar.jpg";
var img = new Image();
img.src = imgUrl;
//判断图片大小是否大于0 或者 图片高度与宽度都大于0
if (img.filesize >0 || (img.width > 0 && img.height > 0)) {
e.src = imgUrl;
} else{
//默认图片也不存在的时候
}
}
</script>
<img src="images/logo.png" onerror="imgExists(this);" />
附上参考链接:w3school中img部分
最后,感谢阅读!!!如果觉得不错,记得star哦!