图片加载失败捕获上报及处理

图片加载失败捕获上报及处理

前端页面中加载最多的静态资源之一就是图片了,当出现图片加载失败时,非常影响用户体验。这时候我们就需要对图片是否成功加载进行判断,并对图片加载失败进行处理。

图片加载监听

单个捕获

HTML中的img标签可以绑定onerror监听,来对目标图片加载失败进行处理。

<img id="pic" src="http://picundefined.png" />
<script>const img = document.getElementById('pic');img.onerror = function (e) {console.log('图片加载异常', e.target)};
</script>

统一捕获

对于实际项目而言,可能存在非常多图片,如果对于每个img标签都单独绑定处理函数,不仅麻烦,而且可能会有遗漏,后期也不好维护。这时候可以通过window.addEventListener方法添加全局的onerror的事件监听。不过由于 addEventListener 也能够捕获 js 错误,因此需要过滤判断,判断为资源错误的时候才进行处理。

window.addEventListener('error', event => {// 过滤js errorlet target = event.target || event.srcElement;if(target instanceof HTMLImageElement) {console.log("图片加载异常", target);};
}, true);

图片加载失败的情况

  1. 网速太慢
  2. src值异常(图片链接失效或者错误)
  3. 浏览器禁用图像
  4. 用户使用屏幕阅读器

图片加载失败处理

如果没有任何处理,那么在浏览器中就展示一个破裂图片。

在这里插入图片描述

设置alt属性

HTML为这种情况提供了一个alt属性,规定在图像无法显示的时候展示的替代文本。

在这里插入图片描述

这种方式适合所有图片加载失败的情况。

设置兜底图

这是图片错误处理中最常用的手段,不过只针对上面提到的1、2种情况。

当图片加载失败时,就展示兜底图。

这里使用全局获取方式进行处理:

window.addEventListener('error', event => {// 过滤js errorlet target = event.target || event.srcElement;if(target instanceof HTMLImageElement) {console.log("图片加载异常", target);target.src = '兜底图.png';};
}, true);

base64编码

如果是由于网速太慢原因导致的图片加载异常,那么兜底图也可能也可能加载失败,这时候就会导致无限触发onerror处理,可以使用base64编码的方式将兜底图硬编码在代码中,这样当js加载的时候,图片也完成了加载。

base64本身的特性就决定了图片就会比原来大上1/3左右

微信小程序中的处理

由于微信小程序中image标签不支持onerror事件,所以就只能通过在每一个image标签上添加binderror事件了。

<image src="{{imgSrc}}" mode="scaleToFill" binderror="errorHandle"></image>errorHandle: function (e) {this.setData({imgSrc: "兜底图.png",})
},

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/6050.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序浏览docx,pdf等文件在线预览使用wx.openDocument

wx.downloadFile({ url: fileUrl,//pdf链接success(res) {wx.openDocument({ //打开文档filePath: res.tempFilePath,fileType: "pdf",//文档类型showMenu: true,success: function (res) {wx.showToast({title: 打开文档成功,})},fail: function (res) {wx.showToas…

springboot整合xxl-job

文章目录 前言一、xxl-job是什么&#xff1f;二、使用步骤1.下载源码,并部署好2.模仿xxl-job-executor-sample-springboot 自己建立一个服务1 引入xxl-job核心依赖2 创建服务,配置yml3 创建一个配置类,用于读取上述配置,并配置好handel信息4 创建一个执行器的任务类,用于执行真…

阵列模式综合第三部分:深度学习(附源码)

一、前言 这个例子展示了如何设计和训练卷积神经网络&#xff08;CNN&#xff09;来计算产生所需模式的元素权重。 二、介绍 模式合成是阵列处理中的一个重要课题。阵列权重有助于塑造传感器阵列的波束图案&#xff0c;以匹配所需图案。传统上&#xff0c;由于空间信号处理和频…

举例说明什么是卷积神经网络

卷积神经网络&#xff08;Convolutional Neural Network, CNN&#xff09;是一种深度学习模型&#xff0c;主要应用于计算机视觉任务&#xff0c;如图像分类、物体检测等。它通过卷积层、池化层和全连接层等组件来实现对图像的特征提取和分类。 现在我们以一个简单的图像分类任…

Android Compose UI实战练手----Google Bloom登录页

目录 1.概述2.页面展示1.1 亮色主题1.2暗色主题 3.登录页面拆分以及编码实现3.1 登录页面拆分3.2 编码实现3.2.1 LoginPage3.2.2 LoginTitle3.2.3 LoginInoutBox3.2.4 LoginHintWithUnderLine3.2.5 LoginButton 4.源码地址 1.概述 在之前的章节中我们已经介绍了如何实现Google…

什么是网络货运平台?

一、什么是网络货运平台&#xff1f; 网络货运平台是依托互联网平台整合配置运输资源&#xff0c;以承运人身份与托运人签订运输服务合同、承担承运人责任&#xff0c;委托实际承运人完成运输服务的物流平台。它通过互联网形式实现运输过程真实、公平、公正、合法&#xff0c…

logback-spring.xml详解

本文来写说下logback-spring.xml相关的知识与概念 文章目录 概述configuration元素定义上下文名称定义变量appender组件RollingFileAppender配置logger配置root配置ELK的配置输出logback状态数据异步输出日志代码中的日志格式本文小结 概述 对于xml日志文件的配置&#xff0c;大…

前端web入门-移动web-day09

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 空间转换 空间转换 – 平移 视距 perspective 空间 – 旋转 立体呈现 – transform-style 空间转换…

Ubuntu下编译VTK

1.先安装QT&#xff0c;不知道不装行不行&#xff0c;我们项目需要。 2.去VTK官网下载VTK源码。 3.解压源码。 4.编译需要用cmake-gui&#xff0c;装QT的一般都有&#xff0c;但需要把路径添加到PATH才能用。 5.打开cmake-gui&#xff0c;设置源码路径&#xff0c;编译输出路…

只要你会vue,5分钟学不会 svelte 你来找我

&#x1f33b; 前言 2023年了&#xff0c;国内前端领域基本被Vue、React占领市场&#xff0c;近几年似乎前端技术栈的迭代更新缓慢了下来。 当然近几年也出现了像svelte、solid.js等一些新兴的前端框架&#xff0c;这些框架有很多创新的点&#xff0c;比如svelte相比于vue,re…

JS文件UTF8格式乱码问题

UTF8格式的JS文件在IE中显示乱码问题的解决 这种情况通常是由于JS文件头缺少BOM标志引起的,解决方式: 方法1:用系统自带记事本,另存为 UTF-8,覆盖原文件,会自动加上BOM标志(就是文件开头的EF BB BF 三个字节) 方法2: 用notepad 打开,编码菜单,由UTF8编码改为 UTF8-BOM编码

利用RabbitMQ实现消息投递削峰填谷

目录 异步和同步如何选择 异步线程 同步收发消息 一、导入依赖库 二、创建RabbitMQ配置类 三、创建消息任务类 异步和同步如何选择 依靠多线程&#xff0c;Java代码可以同步执行也可以异步执行 RabbitMQ提供了同步和异步两种收发消息模式 我们采用 Java异步线程 MQ同步…