img中的src加载失败时如何用默认图片来替换呢?

news/2024/12/2 9:38:17/文章来源:https://www.cnblogs.com/ai888/p/18580995

在前端开发中,当 <img> 元素的 src 属性指定的图片加载失败时,可以使用几种方法来替换为默认图片:

1. 使用 onerror 属性:

这是最直接和常用的方法。onerror 属性会在图片加载失败时触发一个 JavaScript 事件,你可以在这个事件中将 src 属性更改为默认图片的路径。

<img src="image.jpg" onerror="this.onerror=null; this.src='default.jpg'">
  • this.onerror=null; 这行代码很重要,它可以防止无限循环的错误。如果默认图片也加载失败,onerror 事件会再次触发,如果没有这行代码,就会陷入无限循环。

2. 使用 <picture> 元素和 <source> 元素 (推荐):

<picture> 元素允许你定义多个图像源,浏览器会根据不同的条件选择最合适的源。这提供了更好的灵活性和控制,例如可以根据屏幕尺寸或设备类型来选择不同的图像。

<picture><source srcset="image.webp" type="image/webp"><source srcset="image.jpg" type="image/jpeg"><img src="default.jpg" alt="Default Image">
</picture>

在这个例子中,浏览器会优先尝试加载 image.webp,如果浏览器不支持 WebP 格式,则会尝试加载 image.jpg。如果这两个都加载失败,则会显示 default.jpg

3. 使用 JavaScript:

你可以使用 JavaScript 来监听 img 元素的 onloadonerror 事件,并在 onerror 事件中替换图片。

const img = document.getElementById('myImage');
img.onload = function() {// 图片加载成功
};
img.onerror = function() {this.onerror=null; // 防止无限循环this.src = 'default.jpg';
};
<img id="myImage" src="image.jpg" alt="My Image">

4. CSS 的 object-fitobject-position 属性 (不完全替换,但可以改善体验):

虽然这不是直接替换图片,但可以利用 CSS 的 object-fitobject-position 属性来控制默认图片在容器中的显示方式,从而在一定程度上弥补原图加载失败带来的视觉缺陷。例如,你可以将默认图片设置为 covercontain,使其填满或包含在 img 元素的容器中。

总结:

推荐使用 <picture> 元素,因为它提供了更好的灵活性和控制,并且可以根据不同的条件加载不同的图像。如果你的需求比较简单,onerror 属性也是一个不错的选择。 使用 JavaScript 可以实现更复杂的逻辑,例如根据不同的错误类型显示不同的默认图片。

哪种方法最适合你取决于你的具体需求和项目环境。 如果需要兼容性更好,onerror 属性是首选。 如果需要根据不同情况显示不同默认图片,或者需要更精细的控制,JavaScript 方法更合适。 <picture> 元素则提供了更现代化和灵活的解决方案,尤其在需要根据设备或网络条件提供不同图片格式时。

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

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

相关文章

巧妙应对顾客还价:三大原则+一句话攻略

原价229元,在享受88折优惠后降至201元,此时顾客往往会顺口提出:“零头1元就抹掉吧。”这种还价行为往往预示着购买意愿已相当明确,但遗憾的是,许多交易就因这小小的还价而未能达成。那么,如何巧妙应对,一句话化解顾客的还价难题呢? 首先,处理顾客还价需坚守三大基本原…

css中的baseline,你知道吗?

是的,我知道 CSS 中的 baseline。 它指的是文本基线,是排列文本行的一个重要概念。更具体地说,它是字母“x”的下边缘所在的线。 理解 baseline 对于垂直对齐元素,尤其是文本元素至关重要。 以下是一些关于 CSS baseline 的关键点:默认对齐方式: 在没有明确指定对齐方式…

飞驰云联再次荣膺“CSA 2024安全创新奖” 实力再获认可!

2024年11月15日,由云安全联盟大中华区(CSA大中华区)主办的“第八届云安全联盟大中华区大会”于北京隆重召开,会议聚焦众多国际知名专家学者及行业领袖,共同探讨行业前沿技术与发展趋势。会上,CSA大中华区发布了多个研究成果并进行了 CSA 2024 年度颁奖仪式,Ftrans飞驰云…

云效收费

产品解决方案文档与社区权益中心定价云市场合作伙伴支持与服务了解阿里云 备案控制台bjcaijing 文档输入文档关键字查找 云效产品概述动态与公告云效套餐与计费调整公告 产品月度更新总览 Codeup 更新日志 Flow 更新日志 Packages 更新日志 Projex更新日志 Insight 更新日志 Ap…

【看过来】实现总分支跨网域文件交换和共享的秘籍!

⼤型企业和一些机构为扩大市场份额、优化资源配置,在不同地区设立多级下属分支机构,如常见的总行-分行-营业网点模式、总部-分公司-研发中心等模式等。总部和各分支机构内部,也会根据安全等级划分不同的安全域或网络区域。这就导致总分支之间,会存在跨安全域、跨地域、跨组…

【人人都能学得会的NLP - 文本分类篇 05】使用LSTM完成情感分析任务

【人人都能学得会的NLP - 文本分类篇 05】使用LSTM完成情感分析任务 NLP Github【人人都能学得会的NLP - 文本分类篇 05】使用LSTM完成情感分析任务NLP Github 项目:NLP 项目实践:fasterai/nlp-project-practice 介绍:该仓库围绕着 NLP 任务模型的设计、训练、优化、部署和应…

织梦后台专题节点文章列表只能保存1个文档

问题:专题节点文章列表只能保存1个文档。 解决办法:打开 /dede/spec_add.php 和 /dede/spec_edit.php 文件,将 $arcids = ; 改为 $arcids = array();。扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等…

PbootCMS 织梦搜索结果页分页条样式修改

编辑 /include/arc.searchview.class.php 文件,将532行左右的代码:$this->dtp->Assign($tagid, $this->GetPageListDM($list_len));修改为:$listitem = $ctag->GetAtt("listitem") == "" ? "index,pre,pageno,next,end,option" …

易优CMS中出现 General error: 1366 Incorrect string value 错误的原因是什么?

在使用易优CMS时,如果遇到 General error: 1366 Incorrect string value 错误,通常是由于数据库字段不支持某些特殊字符或表情符号导致的。具体来说,MySQL在5.5版本之前,默认的UTF-8编码只支持1-3个字节的字符,这涵盖了基本多语言平面(BMP)部分的Unicode编码区。然而,从…

易优CMS中 formreply 标签的基本用法是什么?

在易优CMS中,formreply 标签用于获取自由表单的回复列表。这个标签非常有用,特别是在需要展示用户提交的表单回复时。以下是 formreply 标签的基本用法和详细说明:基本语法:html{eyou:formreply typeid="52" id="field" pagesize=5}用户头像: {$field.…

在易优CMS中,如何动态显示自由表单回复列表中的自定义字段?

在易优CMS中,自由表单回复列表中的自定义字段可以通过 formreply 标签动态显示。以下是详细的步骤和说明:获取自定义字段ID:首先,需要知道自定义字段的ID。通常,这些ID可以在易优CMS后台的自由表单管理中找到。假设自定义字段的ID为 1802。使用 formreply 标签:在模板文件…

vxe-table 树形表格序号的使用

vxe-table 树形结构支持多种方式的序号,可以及时带层级的序号,也可以是自增的序号。 官网:https://vxetable.cn 带层级序号<template><div><vxe-grid v-bind="gridOptions"></vxe-grid></div> </template><script> exp…