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 相关文章推荐
在IE下获取object(ActiveX)的Param的代码
Sep 15 Javascript
js 返回时间戳所对应的具体时间
Jul 20 Javascript
autoIMG 基于jquery的图片自适应插件代码
Mar 12 Javascript
javascript数组去重的方法汇总
Apr 14 Javascript
JS封装cookie操作函数实例(设置、读取、删除)
Nov 17 Javascript
JS实现合并两个数组并去除重复项只留一个的方法
Dec 17 Javascript
最简单纯JavaScript实现Tab标签页切换的方式(推荐)
Jul 25 Javascript
利用Node.JS实现邮件发送功能
Oct 21 Javascript
基于Vue2-Calendar改进的日历组件(含中文使用说明)
Apr 14 Javascript
JS通过ajax + 多列布局 + 自动加载实现瀑布流效果
May 30 Javascript
对vuex中getters计算过滤操作详解
Nov 06 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
Feb 18 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
php auth_http类库进行身份效验
2009/03/19 PHP
mac下使用brew配置环境的步骤分享
2011/05/23 PHP
php中通过正则表达式下载内容中的远程图片的函数代码
2012/01/10 PHP
开源php中文分词系统SCWS安装和使用实例
2014/04/11 PHP
JavaScript入门教程(5) js Screen屏幕对象
2009/01/31 Javascript
js 判断上传文件大小及格式代码
2013/11/13 Javascript
node.js中的fs.lstat方法使用说明
2014/12/16 Javascript
jQuery解析XML与传统JavaScript方法的差别实例分析
2015/03/05 Javascript
PHPMyAdmin导入时提示文件大小超出PHP限制的解决方法
2015/03/30 Javascript
详细解密jsonp跨域请求
2015/04/15 Javascript
简介JavaScript中的push()方法的使用
2015/06/09 Javascript
如何让一个json文件显示在表格里【实现代码】
2016/05/09 Javascript
BootStrap 附加导航组件
2016/07/22 Javascript
微信小程序中吸底按钮适配iPhone X方案
2017/11/29 Javascript
JavaScript中判断为整数的多种方式及保留两位小数的方法
2019/09/09 Javascript
[01:04]DOTA2:伟大的Roshan雕塑震撼来临
2015/01/30 DOTA
[46:40]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
web.py获取上传文件名的正确方法
2014/08/26 Python
Python用threading实现多线程详解
2017/02/03 Python
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
2018/04/30 Python
详解pandas数据合并与重塑(pd.concat篇)
2019/07/09 Python
Python 程序员必须掌握的日志记录
2020/08/17 Python
python利用xlsxwriter模块 操作 Excel
2020/10/14 Python
详解查看Python解释器路径的两种方式
2020/10/15 Python
兰蔻加拿大官方网站:Lancome加拿大
2016/08/05 全球购物
资源工程专业毕业生求职信
2014/02/27 职场文书
高校教师岗位职责
2014/03/18 职场文书
2014年文学毕业生自我鉴定
2014/04/23 职场文书
市政管理求职信范文
2014/05/07 职场文书
十佳少年事迹材料
2014/12/25 职场文书
社会实践活动报告
2015/02/05 职场文书
工作时间调整通知
2015/04/24 职场文书
新学期新寄语,献给新生们!
2019/11/15 职场文书
经典人生语录分享:不畏将来,不念过去,笑对当下
2019/12/12 职场文书
MySQL之DML语言
2021/04/05 MySQL
一定要知道的 25 个 Vue 技巧
2021/11/02 Vue.js