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 相关文章推荐
Javascript SHA-1:Secure Hash Algorithm
Dec 20 Javascript
各浏览器中querySelector和querySelectorAll的实现差异分析
May 23 Javascript
jQuery 全选/反选以及单击行改变背景色实例
Jul 02 Javascript
JavaScript编程中的Promise使用大全
Jul 28 Javascript
jQuery Validate验证框架经典大全
Sep 23 Javascript
js点击文本框弹出可选择的checkbox复选框
Feb 03 Javascript
谈一谈jQuery核心架构设计
Mar 28 Javascript
Bootstrap jquery.twbsPagination.js动态页码分页实例代码
Feb 20 Javascript
详解Angular5路由传值方式及其相关问题
Apr 28 Javascript
分享vue里swiper的一些坑
Aug 30 Javascript
vue开发环境配置跨域的方法步骤
Jan 16 Javascript
vscode 调试 node.js的方法步骤
Sep 15 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 中 Orientation 属性判断上传图片是否需要旋转
2015/10/16 PHP
PHP hex2bin()函数用法讲解
2019/02/25 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
JS 获取span标签中的值的代码 支持ie与firefox
2009/08/24 Javascript
js中访问html中iframe的文档对象的代码[IE6,IE7,IE8,FF]
2011/01/08 Javascript
JavaScritp添加url参数并将参数加入到url中及更改url参数的方法
2015/10/26 Javascript
jQuery ajax 当async为false时解决同步操作失败的问题
2016/11/18 Javascript
JavaScript三种绑定事件方式及相互之间的区别分析
2017/01/10 Javascript
微信小程序 slider的简单实例
2017/04/19 Javascript
AngularJs每天学习之总体介绍
2017/08/07 Javascript
JavaScript数据类型的存储方法详解
2017/08/25 Javascript
浅谈vue的props,data,computed变化对组件更新的影响
2018/01/16 Javascript
vue-router+nginx 非根路径配置方法
2018/06/30 Javascript
原生JS实现逼真的图片3D旋转效果详解
2019/02/16 Javascript
angularjs实现table表格td单元格单击变输入框/可编辑状态示例
2019/02/21 Javascript
Angular 多级路由实现登录页面跳转(小白教程)
2019/11/19 Javascript
微信小程序 scroll-view 实现锚点跳转功能
2019/12/12 Javascript
angula中使用iframe点击后不执行变更检测的问题
2020/05/10 Javascript
[03:36]2014DOTA2 TI小组赛综述 八强诞生进军钥匙球馆
2014/07/15 DOTA
[01:10:24]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第一场 2月28日
2021/03/11 DOTA
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
2017/11/30 Python
详解Python中的正则表达式
2018/07/08 Python
python找出一个列表中相同元素的多个索引实例
2019/06/11 Python
Python实现EXCEL表格的排序功能示例
2019/06/25 Python
基于Django ORM、一对一、一对多、多对多的全面讲解
2019/07/26 Python
python getpass实现密文实例详解
2019/09/24 Python
PyCharm 2019.3发布增加了新功能一览
2019/12/08 Python
Python爬虫爬取电影票房数据及图表展示操作示例
2020/03/27 Python
python torch.utils.data.DataLoader使用方法
2020/04/02 Python
Pandas的Apply函数具体使用
2020/07/21 Python
用python实现一个简单计算器(完整DEMO)
2020/10/14 Python
用JAVA实现一种排序,JAVA类实现序列化的方法(二种)
2014/04/23 面试题
公司授权委托书
2014/04/04 职场文书
小学优秀班干部事迹材料
2014/05/25 职场文书
创先争优活动承诺书
2014/08/30 职场文书
Mysql实现简易版搜索引擎的示例代码
2021/08/30 MySQL