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 相关文章推荐
各种效果的jquery ui(接口)介绍
Sep 17 Javascript
Javascript 原型和继承(Prototypes and Inheritance)
Apr 01 Javascript
input的focus方法使用
Mar 13 Javascript
JS检测输入字符是否包含非法字符的示例代码
Feb 11 Javascript
ES6新特性之解构、参数、模块和记号用法示例
Apr 01 Javascript
Angularjs 与 bower安装和使用详解
May 11 Javascript
jQuery Validate 无法验证 chosen-select元素的解决方法
May 17 jQuery
JavaScript正则表达式校验与递归函数实际应用实例解析
Aug 04 Javascript
ComboBox(下拉列表框)通过url加载调用远程数据的方法
Aug 06 Javascript
解决vue-quill-editor上传内容由于图片是base64的导致字符太长的问题
Aug 20 Javascript
利用React高阶组件实现一个面包屑导航的示例
Aug 23 Javascript
React实现动效弹窗组件
Jun 21 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
建立文件交换功能的脚本(一)
2006/10/09 PHP
ADODB类使用
2006/11/25 PHP
PHP数据类型的总结分析
2013/06/13 PHP
PHP中使用localhost连接Mysql不成功的解决方法
2014/08/20 PHP
php使用Jpgraph绘制3D饼状图的方法
2015/06/10 PHP
php把时间戳转换成多少时间之前函数的实例
2016/11/16 PHP
PHP数组基本用法与知识点总结
2020/06/02 PHP
重定向实现代码
2006/11/20 Javascript
js 数组实现一个类似ruby的迭代器
2009/10/27 Javascript
javascript下利用arguments实现string.format函数
2010/08/24 Javascript
AngularJS语法详解
2015/01/23 Javascript
jQuery过滤HTML标签并高亮显示关键字的方法
2015/08/07 Javascript
基于javascript实现浏览器滚动条快到底部时自动加载数据
2015/11/30 Javascript
javascript实现简单的可随机变色网页计算器示例
2016/12/30 Javascript
jQuery.Form上传文件操作
2017/02/05 Javascript
Vue父组件调用子组件事件方法
2018/02/23 Javascript
Vue如何实现响应式系统
2018/07/11 Javascript
trackingjs+websocket+百度人脸识别API实现人脸签到
2018/11/26 Javascript
使用Vue实现调用接口加载页面初始数据
2019/10/28 Javascript
归纳整理Python中的控制流语句的知识点
2015/04/14 Python
windows下安装Python和pip终极图文教程
2017/03/05 Python
python3使用requests模块爬取页面内容的实战演练
2017/09/25 Python
tensorflow TFRecords文件的生成和读取的方法
2018/02/06 Python
一篇文章弄懂Python中所有数组数据类型
2019/06/23 Python
Python二维码生成识别实例详解
2019/07/16 Python
Python高级特性 切片 迭代解析
2019/08/23 Python
Python 使用Opencv实现目标检测与识别的示例代码
2020/09/08 Python
No module named ‘win32gui‘ 的解决方法(踩坑之旅)
2021/02/18 Python
瑞士首家网上药店折扣店:McDrogerie
2020/12/22 全球购物
StringBuilder和String的区别
2015/05/18 面试题
环境科学专业个人求职信
2013/12/15 职场文书
《搭石》教学反思
2014/04/07 职场文书
QQ空间主人寄语大全
2014/04/12 职场文书
2014年店长工作总结
2014/11/17 职场文书
小学运动会入场口号
2015/12/24 职场文书
docker 制作mysql镜像并自动安装
2022/05/20 Servers