1、传统的图片异常处理
<img> 如果因为网络或者跨域限制等原因无法正常加载,在默认情况下会显示浏览器默认的“裂开”的图片效果,如果设置了 alt 属性值,则 alt 属性对应的内容也会一并显示。例如:
<img src="//www.zhangxinxu.com/zxx.ico" alt="府谷市民小柴">
例如Chrome浏览器下的效果截图如下所示:
可以看到图片加载异常之后的视觉效果实在是太粗糙了,程序员可忍设计师不可忍,因此,为了更好的视觉效果,实际项目开发中,我们总会对图片加载异常的边界场景进行额外的处理。
传统的图片加载异常会使用一个加载失败的占位符代替,这个占位图通常会是一张裂开的图片。
例如下面这张图:
触发使用占位图可以通过 onerror 事件,代码示意如下:
<img src="xxx.png" alt="府谷市民小柴" onerror="this.src=‘break.svg‘;">
其中第2张图片故意使用了一个错误的地址,结果如下截图所示:
然而上面这种实现方式有一个比较致命的问题,那就是用户并不清楚无法显示的图片具体表示的含义是什么。
2、最佳实践,同时显示alt信息
为了便于维护,图像加载error的时候不再是替换src地址,而是新增一个错误类名,通过错误error函数添加class名称error,例如 .error :
<img src="zxx.png" alt="府谷市民小柴" onerror="this.classList.add(‘error‘);">
然后配合使用如下所示的CSS(部分CSS样式细节大家可以根据自己的审美进行修改):
img.error { display: inline-block; transform: scale(1); content: ‘‘; color: transparent; } img.error::before { content: ‘‘; position: absolute; left: 0; top: 0; width: 100%; height: 100%; background: #f5f5f5 url(break.svg) no-repeat center / 50% 50%; } img.error::after { content: attr(alt); position: absolute; left: 0; bottom: 0; width: 100%; line-height: 2; background-color: rgba(0,0,0,.5); color: white; font-size: 12px; text-align: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
此时就可以看到失败的图片和alt文字信息同时出现的效果了。
眼见为实,您可以狠狠地点击这里: 图片加载异常同时显示alt信息demo
对应的显示效果参见下面的截图:
可以看到,内容展示和视觉表现同时兼顾了,是我这些年打磨出来的目前最好的图像加载异常兜底处理实践,一段代码整站通用,低成本高收益。
完结: 2020-10-26 12:01:06