Vue中错误图片的处理的实现代码


Posted in Javascript onNovember 07, 2019

在一个Vue的PC项目中,要求给错误图片不要让它显示丑陋的图片,就要给图片写一个失败后的默认图片,

Vue中错误图片的处理的实现代码

在这里写了两种方法,

第一种方法,也就是百度到的最多的代码,就是给一张图片一个默认值。

Vue中错误图片的处理的实现代码

Vue中错误图片的处理的实现代码

第二种问题,如果页面中有很多地方都存在这个东西,那么在不同的页面中写很对是很麻烦的。

就使用到了VUe的指令。

这里分为了两种情况, 一种是直接加载默认图片,等图片加载完成之后再使用加载完成的图片 。

代码如下

// 如果自定义指令多的话,再重新开启一个文件专门写自定义指令 太乱了
//全局注册自定义指令,用于判断当前图片是否能够加载成功,可以加载成功则赋值为img的src属性,否则使用默认图片
//指令名称为:real-img
// 通用错误图片的处理方法,或者也可以懒加载的样子
Vue.directive('real-img', async function (el, binding) {
 let imgURL = binding.value;//获取图片地址
 if (imgURL) {
  let exist = await imageIsExist(imgURL);
  if (exist) {
   el.setAttribute('src', imgURL);
  }
 }
});

/**
* 检测图片是否存在
* @param url
*/
let imageIsExist = function (url) {
 return new Promise((resolve) => {
  var img = new Image();
  img.onload = function () {
   if (this.complete == true) {
    console.log('资源加载');
    resolve(true);
    img = null;
   }
  }
  img.onerror = function () {
   console.log('资源error', img);
   resolve(false);
   img = null;
  }
  img.src = url;
 })
};

使用方式

<div class="appd_d_ch_logo">
<img src="../../assets/img/error/app_d.png" v-real-img="appDetail.icon" alt="">
</div>

第二种是直接加载图片,等到加载失败的时候使用默认图。

/**
* 检测图片是否存在
* @param url
*/
let imageIsExist = function (url) {
 return new Promise((resolve) => {
  var img = new Image();
  img.onload = function () {
   if (this.complete == true) {
    console.log('资源加载');
    resolve(true);
    img = null;
   }
  }
  img.onerror = function () {
   console.log('资源error', img);
   resolve(false);
   img = null;
  }
  img.src = url;
 })
};



// 单独作用于应用模块的管理
// 传的是错误的图片
Vue.directive('err-img', async function (el, binding) {
 let imgURL = binding.value;//获取图片地址
 let realURL = el.src;
 if (imgURL) {
  let exist = await imageIsExist(realURL);
  if (!exist) {
   el.setAttribute('src', imgURL);
  }
 }
});

Vue文件中使用方式如下

<div class="appd_d_ch_logo">
<img src="../../assets/img/error/app_d.png" v-real-img="appDetail.icon" alt="">
</div>

很久了学习一点新东西还是感觉挺高兴的,Vue指令很多人都见过,但是到了用的时候总是没想到,还是百度看到改造了一点点。

一段js代码不需要引入在所有的页面中使用很容易的办到,可以把这一段js代码放到Vue.prototype上面。

之前一直在想这个问题,有什么方式可以让所有的代码都可以使用一段函数或者是什么的,看到了指令,还是要多看看文档,只有到了用的时候才可能想到自己曾经看到过这么一段话,再重新翻看文档使用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Textarea与懒惰渲染实现代码
Jan 04 Javascript
javascript放大镜效果的简单实现
Dec 09 Javascript
javascript实现点击按钮让DIV层弹性移动的方法
Feb 24 Javascript
jquery控制页面的展开和隐藏实现方法(推荐)
Oct 15 Javascript
详解vue.js 开发环境搭建最简单攻略
Jun 12 Javascript
JS排序算法之希尔排序与快速排序实现方法
Dec 12 Javascript
Node层模拟实现multipart表单的文件上传示例
Jan 02 Javascript
vue-infinite-loading2.0 中文文档详解
Apr 08 Javascript
微信小程序动态添加view组件的实例代码
May 23 Javascript
详解Node.js异步处理的各种写法
Jun 09 Javascript
详解Vue 项目中的几个实用组件(ts)
Oct 29 Javascript
详解vue中在循环中使用@mouseenter 和 @mouseleave事件闪烁问题解决方法
Apr 07 Javascript
vue 实现购物车总价计算
Nov 06 #Javascript
JavaScript原型式继承实现方法
Nov 06 #Javascript
vue点击自增和求和的实例代码
Nov 06 #Javascript
解决vue 表格table列求和的问题
Nov 06 #Javascript
JavaScript如何借用构造函数继承
Nov 06 #Javascript
vue 解决移动端弹出键盘导致页面fixed布局错乱的问题
Nov 06 #Javascript
vue 实现移动端键盘搜索事件监听
Nov 06 #Javascript
You might like
php封装的mysqli类完整实例
2016/10/18 PHP
js实现的网站首页随机公告随机公告
2007/03/14 Javascript
JS IE和FF兼容性问题汇总
2009/02/09 Javascript
jQuery UI AutoComplete 自动完成使用小记
2010/08/21 Javascript
js简单实现交换Li的值
2014/05/22 Javascript
jQuery操作JSON的CRUD用法实例
2015/02/25 Javascript
jQuery中队列queue()函数的实例教程
2016/05/03 Javascript
判断JS对象是否拥有某属性的方法推荐
2016/05/12 Javascript
js获取指定字符前/后的字符串简单实例
2016/10/27 Javascript
详解ES6中的let命令
2020/04/05 Javascript
使用Angular CLI进行Build(构建)和Serve详解
2018/03/24 Javascript
VUE简单的定时器实时刷新的实现方法
2019/01/20 Javascript
js 闭包深入理解与实例分析
2020/03/19 Javascript
Vue性能优化的方法
2020/07/30 Javascript
vue实现打地鼠小游戏
2020/08/21 Javascript
[01:51]2014DOTA2国际邀请赛 这个赛场没有失败者VGTi5再见
2014/07/23 DOTA
[06:16]《DAC最前线》之地区预选赛全面回顾
2015/01/19 DOTA
[54:24]Optic vs TNC 2018国际邀请赛小组赛BO2 第二场
2018/08/18 DOTA
Python import用法以及与from...import的区别
2015/05/28 Python
Python判断Abundant Number的方法
2015/06/15 Python
Golang与python线程详解及简单实例
2017/04/27 Python
python3.6中@property装饰器的使用方法示例
2019/08/17 Python
pytorch实现CNN卷积神经网络
2020/02/19 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
2020/02/25 Python
python 回溯法模板详解
2020/02/26 Python
基于python实现检索标记敏感词并输出
2020/05/07 Python
Laura Geller官网:美国彩妆品牌
2018/12/29 全球购物
美国工业用品采购网站:Zoro.com
2020/10/27 全球购物
体育课课后反思
2014/04/24 职场文书
干部四风问题整改措施思想汇报
2014/10/13 职场文书
学期个人自我总结
2015/02/13 职场文书
高中化学教学反思
2016/02/22 职场文书
2019个人年度目标制定攻略!
2019/07/12 职场文书
人生哲理妙语30条:淡写流年,笑过人生
2019/09/04 职场文书
《自然之道》读后感3篇
2019/12/17 职场文书
mysql部分操作
2021/04/05 MySQL