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实现漂亮的动态信息提示效果
Aug 02 Javascript
jQuery jcrop插件截图使用方法
Nov 20 Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
Aug 12 Javascript
轻松学习jQuery插件EasyUI EasyUI创建CRUD应用
Nov 30 Javascript
移动端点击态处理的三种实现方式
Jan 12 Javascript
js判断节假日实例代码
Dec 27 Javascript
基于layui的table插件进行复选框联动功能的实现方法
Sep 19 Javascript
layui默认选中table的CheckBox复选框方法
Sep 19 Javascript
详解vue 组件
Jun 11 Javascript
vue实现div可拖动位置也可改变盒子大小的原理
Sep 16 Javascript
如何在vue中使用kindeditor富文本编辑器
Dec 19 Vue.js
vue el-table实现递归嵌套的示例代码
Aug 14 Vue.js
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
长波知识介绍
2021/03/01 无线电
层叠菜单的动态生成
2006/10/09 PHP
PHP中Session的概念
2006/10/09 PHP
php传值赋值和传地址赋值用法实例分析
2015/06/20 PHP
PHP实现的XML操作类【XML Library】
2016/12/29 PHP
JavaScript高级程序设计
2006/12/29 Javascript
javaScript Array(数组)相关方法简述
2009/07/25 Javascript
jquery 分页控件实现代码
2009/11/30 Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(下:动画篇)
2010/03/24 Javascript
面向对象继承实例(a如何继承b问题)(自写)
2013/07/01 Javascript
js中哈希表的几种用法总结
2014/01/28 Javascript
jQuery检测返回值的数据类型
2015/07/13 Javascript
轻松学习jQuery插件EasyUI EasyUI表单验证
2015/12/01 Javascript
使用jQuery判断Div是否在可视区域的方法 判断div是否可见
2016/02/17 Javascript
JavaScript常用本地对象小结
2016/03/28 Javascript
简单讲解jQuery中的子元素过滤选择器
2016/04/18 Javascript
Javascript简写条件语句(推荐)
2016/06/12 Javascript
JS+CSS实现下拉刷新/上拉加载插件
2017/03/31 Javascript
JavaScript实现的弹出遮罩层特效经典示例【基于jQuery】
2019/07/10 jQuery
使用p5.js实现动态GIF图片临摹重现
2019/10/23 Javascript
一篇文章让你搞懂JavaScript 原型和原型链
2020/11/23 Javascript
[51:14]LGD vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
Python字符转换
2008/09/06 Python
python 等差数列末项计算方式
2020/05/03 Python
基于Python实现2种反转链表方法代码实例
2020/07/06 Python
浅析关于Keras的安装(pycharm)和初步理解
2020/10/23 Python
CSS3用@font-face实现自定义英文字体
2013/09/23 HTML / CSS
国外的一些J2EE面试题一
2012/10/13 面试题
优秀员工获奖感言
2014/03/01 职场文书
合作协议书
2014/04/23 职场文书
党员评议思想汇报
2014/10/08 职场文书
2015年大学学生会工作总结
2015/05/13 职场文书
老人与海读书笔记
2015/06/26 职场文书
MySQL数据库完全卸载的方法
2022/03/03 MySQL
Win10 Anaconda安装python-pcl
2022/04/29 Servers
使用CSS实现按钮边缘跑马灯动画
2023/05/07 HTML / CSS