图片加载失败时怎么优雅地显示默认图? 小艺童 提问于 2026-03-03 13:52:18 阅读 46 组件 我在用原生JS动态渲染用户头像,但有些图片链接失效了,页面就直接裂图很难看。试过在img标签上加onerror,但好像没生效?是不是写法有问题? 这是我的代码: const img = document.createElement('img'); img.src = user.avatarUrl; img.onerror = () => { img.src = '/default-avatar.png'; }; container.appendChild(img); 我来解答 赞 12 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 2 条解答 程序猿贝贝 Lv1 看起来你的代码思路是对的,但有个小细节要注意。首先确认路径没错,/default-avatar.png确实存在且可访问。 建议给 onerror 加个计数器防止死循环:如果默认图也加载失败会反复触发错误事件。这里有个改进版本: const img = document.createElement('img'); img.src = user.avatarUrl; let errorCount = 0; img.onerror = () => { if (errorCount < 1) { img.src = '/default-avatar.png'; errorCount++; } else { img.style.display = 'none'; // 或者显示占位符 } }; container.appendChild(img); 说到安全,别忘了检查用户上传的头像URL是否可信,最好通过后端校验。另外图片路径记得转义,避免XSS注入风险。 这种前端优化确实挺烦人的,不过处理好了用户体验能提升不少。累是累点,但值得。 回复 点赞 2026-03-26 13:07 夏侯家轩 Lv1 你这代码逻辑没大毛病,但顺序搞反了。浏览器解析 img.src 的时候立马就开始加载了,如果你的网速快或者图片在缓存里,等下一行 onerror 执行完的时候,报错早就触发完了,根本抓不到。改一下顺序,先绑事件再给地址。另外,为了防止默认图也挂了导致死循环,最好把 onerror 清空。 const img = document.createElement('img'); // 1. 先绑定事件处理函数 img.onerror = function() { // 防止默认图也挂了导致无限循环,加载完默认图后把 onerror 清掉 this.onerror = null; this.src = '/default-avatar.png'; }; // 2. 最后再赋值 src,确保万无一失 img.src = user.avatarUrl; container.appendChild(img); 回复 点赞 5 2026-03-04 08:32 加载更多 相关推荐 2 回答 82 浏览 Vue图片懒加载时,加载失败的降级方案没生效怎么办? 我在用Vue做图片懒加载优化时,想给加载失败的图片显示默认占位图。参考了一些方案后写了类似下面的代码,但实际测试时发现图片加载失败后还是直接显示红叉,占位图没出现。试过把<img标签换成v-if... 一东旭 优化 2026-01-30 19:16:31 1 回答 80 浏览 加载失败时怎么优雅地显示错误提示? 我在做列表页的加载逻辑,网络请求失败后想显示“加载失败,请重试”的提示,但现在的写法好像没生效,状态切换也不对。 我试过在 catch 里改 loading 和 error 状态,但页面还是卡在 lo... 博主丽萍 交互 2026-03-14 01:46:22 2 回答 41 浏览 Element Plus的Avatar头像不显示图片是怎么回事? 我在用Element Plus的Avatar组件时,传了图片地址但头像一直显示默认占位符,没报错也没加载图片。我试过直接写死URL和用变量绑定,都不行。 代码是这样写的: <el-avatar ... IT人红会 组件 2026-03-04 14:23:19 2 回答 42 浏览 加载失败时重试按钮没反应怎么办? 大家好,我在做一个图片加载组件时遇到了问题。当图片请求失败后,我按规范显示了错误提示和重试按钮,但点击重试按钮完全没反应,控制台也没有报错。 我用axios发起请求时这样写的: this.axios.... 迷人的羽墨 交互 2026-02-12 11:46:35 2 回答 80 浏览 Vue加载失败后重试按钮点击不更新状态怎么办? 我在用Vue做图片加载功能时,遇到加载失败后重试按钮能显示但点击没反应的问题。代码逻辑是失败时显示重试按钮,点击后重置状态重新加载,但实际点击按钮后loading状态始终没变化: <templa... 南宫瑞珺 交互 2026-02-03 23:22:34 1 回答 43 浏览 懒加载图片时 CSS 占位导致布局偏移怎么办? 我在做图片懒加载的时候,为了防止加载时页面跳动,给 img 加了固定宽高,但实际显示还是会有轻微偏移,特别在移动端很明显。是不是我的占位样式写得不对? 目前是这样写的: .lazy-img { wid... FSD-毓珂 优化 2026-03-24 22:45:17 1 回答 49 浏览 Material-UI的Avatar怎么显示默认图标而不是图片? 我在用 Material-UI 的 Avatar 组件,想在用户没上传头像时显示一个默认的 Person 图标,但不管怎么写都只显示首字母或者空白。我试过直接传 进去,但好像不对? 这是我的代码: i... 鉴恒 ☘︎ 组件 2026-03-18 20:51:16 1 回答 33 浏览 WebP图片在老浏览器上不显示怎么办? 我最近把网站的图片全换成WebP格式了,体积小了很多,加载也快。但测试时发现IE和一些旧版安卓浏览器完全不显示图片,页面直接空白。有没有办法优雅降级? 我试过用picture标签配合source,但C... FSD-小倩 优化 2026-03-08 19:07:18 2 回答 51 浏览 响应式图片在移动端显示模糊,怎么设置才能清晰又适配? 最近在做移动端适配,发现用标签加载的图片在大屏幕显示模糊,小屏幕又撑破容器变形。试过给图片加width: 100%和height: auto,但切换到iPhone 12这种高分辨率屏还是模糊,srcs... ლ文仙 移动 2026-02-16 14:44:27 2 回答 43 浏览 WebP图片懒加载时,为什么部分图片显示成空白? 我在用Intersection Observer做WebP图片懒加载时,发现Chrome能正常显示,但Firefox有30%几率显示空白图片。之前用标签的srcset属性根据浏览器支持动态切换WebP... 爱学习的家豪 优化 2026-02-12 09:04:41
/default-avatar.png确实存在且可访问。建议给
onerror加个计数器防止死循环:如果默认图也加载失败会反复触发错误事件。这里有个改进版本:说到安全,别忘了检查用户上传的头像URL是否可信,最好通过后端校验。另外图片路径记得转义,避免XSS注入风险。
这种前端优化确实挺烦人的,不过处理好了用户体验能提升不少。累是累点,但值得。
img.src的时候立马就开始加载了,如果你的网速快或者图片在缓存里,等下一行onerror执行完的时候,报错早就触发完了,根本抓不到。改一下顺序,先绑事件再给地址。另外,为了防止默认图也挂了导致死循环,最好把onerror清空。