Vue img图片加载不出来或加载错误显示默认图片

本文探讨了前端开发中图片加载失败的三种解决方案,包括使用背景图、三元运算符和onerror属性。通过实际案例分析,展示了如何优雅地处理图片显示错误,提升用户体验。
部署运行你感兴趣的模型镜像

之前写页面考虑不到什么占位图,这次UI设计都有一个占位图,不得不逼着自己更准确的考虑图片显示错误时的情况!

1、期初,想着用背景来填充,如果图片显示则就自然而然的把背景图遮盖住了,可实际情况是,如果后台返回的图片有误不显示时,背景图上面还是会有一个破损的小图片显示不美观;

background: url("../../../static/images/avaterSpaceMap.png");
background-size: 100% 100%;

在这里插入图片描述
2、接着又想着用三元运算符来判断,有值就显示,没值为空时就显示占位图,如是:

:src="reportMsg.userAvatarUrl ?reportMsg.userAvatarUrl : require(../../../static/image/img.png)"

但是这么显示有一个缺点就是,如果后台也返回图片的地址了,但就是404 找不到,是错误的地址,我们就没有办法了。

3、最后百度看到img 有一个onerror属性,就可以完美解决上述的问题

<img class="studentImg" :src="reportMsg.userAvatarUrl" onerror="this.src = '../../../static/images/avaterSpaceMap.png'" />

相关前端的问题持续更新,小伙伴们相互关注,一同学习哦

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

### Vue 中 `img` 标签图片加载失败解决方案 #### 将静态资源放置于公共目录 如果遇到位于 `assets` 文件夹中的图片无法通过动态路径获取并显示的问题,一种有效的解决办法是将这些图片移至项目的 `public` 文件夹下。这样做能够确保图片可以通过相对路径被正确访问[^1]。 ```html <img src="/images/example.png" alt="Example"> ``` #### 使用内联 `onerror` 属性自动切换备用像 为了提升用户体验,在图片未能成功加载的情况下提供替代方案是非常重要的。利用 HTML 的 `onerror` 事件可以直接在模板中指定当原加载失败时应展示的备选图片地址[^2]: ```html <template> <div class="image-container"> <img :src="imageSrc" alt="Default Image" onerror="this.onerror=null; this.src='fallback-image.jpg'"/> </div> </template> <script> export default { data() { return { imageSrc: 'path/to/image' } } } </script> ``` 此方法简单易行,并能有效防止因单张图片加载失败而影响整个页面布局的效果。 #### 利用 CSS 后退机制设置默认背景 对于某些特定场景下的头像其他小型标类别的图片,还可以考虑采用纯CSS的方式来实现加载失败后的视觉补偿效果。这种方式需要修改原有HTML结构,仅需调整样式表即可完成配置[^5]: ```css .avatar { width: 40px; height: 40px; position: relative; } .avatar::after { content: ""; display: block; position: absolute; z-index: 2; top: 0; left: 0; width: inherit; height: inherit; background-image: url("../assets/img/default-avatar.png"); background-size: contain; background-repeat: no-repeat; opacity: 0; transition: all ease-in-out .3s; } /* 当父元素内的实际内容为空白加载失败时 */ .avatar img[src=""], .avatar img:not([src]):not(img), .avatar img[alt], .avatar img:-webkit-broken, .avatar img:broken { visibility: hidden !important; } .avatar img + ::after { opacity: 1; } ``` 上述代码片段展示了如何借助伪元素 `.avatar::after` 来作为后备选项,一旦检测到目标 `<img>` 元素处于未定义状态加载过程中出现问题,则立即启用预设好的背景案代替之。 #### 动态重试加载策略 考虑到网络状况佳可能导致部分图片初次请求失败的情形,可以在应用层面加入一定的容错逻辑——即针对那些首次尝试下载却遭遇异常情况的对象实施有限次数范围内的重复拉取操作。这仅有助于提高最终呈现质量,同时也增强了系统的鲁棒性和适应能力[^3]。 ```javascript // 假定存在一个名为 retryLoadImage 的辅助函数用于执行具体的再试行为... function retryLoadImage(element, maxRetries = 3) { let retries = 0; function attemptToReload() { element.onload = null; element.onerror = null; if (retries++ >= maxRetries || document.hidden === true) { console.warn(`Failed to load ${element.currentSrc} after ${maxRetries} attempts.`); // 可在此处设定 fallback 行为,比如更换成占位形链接等。 return; } setTimeout(() => { try { const newImg = new Image(); Object.assign(newImg, {...element}); newImg.onload = () => { element.src = newImg.src; }; newImg.onerror = attemptToReload.bind(null); newImg.src = element.src; } catch (_) {} }, Math.pow(2, retries)*1e3); // 实施指数级等待间隔以减少服务器压力 } element.onerror = attemptToReload; } ``` 该 JavaScript 函数实现了对给定 DOM 节点对象(此处特指 `<img>` 类型)的一系列异步轮询式刷新动作;每当发生一次加载错误便启动新一轮计时器延迟后再次发起 HTTP 请求直至达到预定的最大重试上限为止。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值