图片加载失败替换图片解决方案

图片加载失败替换图片解决方案图片加载失败在不同浏览器表现有差异,比如google可能会一片空白、img的宽高是0*0,ie会在图片位置会出现一个碎片图标,火狐会显示一个边框像这样:一个页面如果很多这种好难看,一般会用默认图片替换显示,解决方法:1、css方案:不好使。在img的伪类加替换图片,但火狐的img没有伪类,google有,有时候就算给img标签加了width、height也没有,图片加载失败img的宽高…

大家好,又见面了,我是你们的朋友全栈君。

图片加载失败在不同浏览器表现有差异,比如google可能会一片空白、img的宽高是0*0,ie会在图片位置会出现一个碎片图标,火狐会显示一个边框像这样:

图片加载失败替换图片解决方案图片加载失败替换图片解决方案

一个页面如果很多这种好难看,一般会用默认图片替换显示,解决方法:

1、css方案:不好使。在img的伪类加替换图片,但火狐的img没有伪类,google有,有时候就算给img标签加了width、height也没有,图片加载失败img的宽高依然是0,详情见这篇文章:

https://www.cnblogs.com/fangsmile/p/7290945.html

这样使用是应为img标签的一些特性:

1,img是个比较特殊的标签,和video一样具有被替代性,所有当图片加载成功时,原先定义的伪类会失去作用不提示。

2,alt属性会在图片加载失败是出现(替代文字),这样伪类就会起作用了。

img {
  position: relative;
}
 
img:after { 
  content: ' ';
  display: block;
  position: absolute;
  z-index: 0;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: url('替代图片');
  background-size: 100% 100%;
}

css方案由于兼容问题,不能完美解决,所以推荐js方案:

通过img的onerror事件处理

<img src="http://www.baidu.com/jfdsklf.img"  onerror="this.src= '/assets/img/head.png'; this.onerror = null;">

// this.onerror = null; 是为了防止替换图片还是丢失,img一直闪烁不停

另外,vue可以这样写:

<img :src="imgUrl" alt="" width="100" height="70" @error="imgOnerror($event)">

...
data() {
    return {
      defaultImg: require('./../../../assets/img/default-course.jpg')
    }
},
methods: {
    imgOnerror(event) {
      let img = event.srcElement
      img.src = this.defaultImg
      img.onerror = null // 防止闪图
    },
    ...
}

本人目前主要开发vue的项目,其实可以更高级的写法:封装成指令很方便:

directive.js

import Vue from 'vue'

/**
 *
 * 注册一个全局自定义指令 `v-errorAlt`
 * 加载错误图片替换默认图
 * */
const courseImg = require('./../assets/img/default-course.png')
const certificateImg = require('./../assets/img/default-certificate.png')
const photoImg = require('./../assets/img/photo.png')
Vue.directive('errorAlt', {
  bind: function (el, binding) {
    el.onerror = () => {
      switch (binding.value) {
        case 'course':
          el.src = courseImg
          break
        case 'cert':
          el.src = certificateImg
          break
        case 'photo':
          el.src = photoImg
          break
        default:
          el.src = certificateImg
      }
      el.onerror = null // 防止闪图
    }
  },
  update: function (el, binding) {
    el.onerror = () => {
      switch (binding.value) {
        case 'course':
          el.src = courseImg
          break
        case 'cert':
          el.src = certificateImg
          break
        case 'photo':
          el.src = photoImg
          break
        default:
          el.src = certificateImg
      }
      el.onerror = null // 防止闪图
    }
  }
})

html使用:


<img :src="imgUIrl" alt="" v-errorAlt="'cert'">

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/137273.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 数论 欧拉函数_数论欧拉函数

    数论 欧拉函数_数论欧拉函数欧拉函数:就是对于一个正整数n,小于n且和n互质的正整数(包括1)的个数,记作φ(n)。欧拉函数的通式:φ(n)=n*(1-1/p1)(1-1/p2)(1-1/p3)*(1-1/p4)……(1-1/pn)其中p1,p2……pn为n的所有质因数,n是不为0的整数。φ(1)=1(唯一和1互质的数就是1本身)。所以,根据通式我们可以打出以下代码:lleular(lln){…

  • linux文件句柄数上限_怎么清除文件句柄

    linux文件句柄数上限_怎么清除文件句柄文章目录查看修改查看cat/proc/sys/fs/nr_open每个进程最大限制ulimit-n当前用户的当前shell最大限制(多个shell,每个都能到达最大限制)cat/proc/sys/fs/file-max系统级别最大限制记住前三个就好了cat/proc/sys/fs/file-nr:[root@izm3mkp4g43hdqz~]#ca…

    2022年10月17日
  • rsync服务的三种模式测试[通俗易懂]

    rsync服务的三种模式测试[通俗易懂]目录1什么是rsync1.1rsync简介rsync特性1.3rsync的企业工作场景说明2rsync三种模式:2.1rsync常用参数选项2.2rsync本地模式2.3rsyncshell模式2.4rsyncdaemon模式3rsync服务故障模拟4rsync多模块实战5rsync排除及无差异同步实战6rsync优缺点6….

    2022年10月13日
  • div css仿京东订单流程图样式代码

    效果展示 http://hovertree.com/texiao/css/25/本效果适合PC,也适合移动端手机扫描二维码查看效果:效果图:代码如下:转自:http://hovertre

    2021年12月26日
  • 在 Word 中插入域代码并设置域代码的格式(转)「建议收藏」

    在 Word 中插入域代码并设置域代码的格式(转)「建议收藏」MicrosoftOfficeWord中的域用作文档中可能会改变的数据的占位符,并用于在邮件合并文档中创建套用信函和标签。这些种类的域也称为域代码,它们不同于那些用于输入信息的域类型,如在表单上。有关向文档中添加表单域的信息,请参阅创建打印表单、创建用户在Word中填写的表单或在Word中制作核对清单使用特定命令时(如插入页码时、插入封面等文档构建基块时或创建目录时),…

  • 搭建环境是什么意思_如何搭建安卓开发环境

    搭建环境是什么意思_如何搭建安卓开发环境WebIDE下载网址:https://tools.hana.ondemand.com/#sapui5下载好之后打开进入WEBIDE\eclipse\config_master\service.destinations\destinations,在destinations文件下面拷入SAPGUI的客户端配置(txt文档),URL填入GUI上配置的服务器地址就行,端口就配8080(有冲突的话在后台关掉),格式如下之后返回\WEBIDE\eclipse打开orion运行运…

    2022年10月10日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号