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 相关文章推荐
JS获取URL中的参数数据
Dec 05 Javascript
学习javascript面向对象 javascript实现继承的方式
Jan 04 Javascript
jQuery UI库中dialog对话框功能使用全解析
Apr 23 Javascript
基于Vuejs实现购物车功能
Aug 02 Javascript
JS生成和下载二维码的代码
Dec 07 Javascript
JavaScript中校验银行卡号的实现代码
Dec 19 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
Jan 20 Javascript
js 简易版滚动条实例(适用于移动端H5开发)
Jun 26 Javascript
ECMAscript 变量作用域总结概括
Aug 18 Javascript
JavaScript调用模式与this关键字绑定的关系
Apr 21 Javascript
vue使用keep-alive保持滚动条位置的实现方法
Apr 09 Javascript
JS实现获取当前所在周的周六、周日示例分析
May 11 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
如何选购合适的收音机
2021/03/01 无线电
php+mysql结合Ajax实现点赞功能完整实例
2015/01/30 PHP
php把数组值转换成键的方法
2015/07/13 PHP
php使用get_class_methods()函数获取分类的方法
2016/07/20 PHP
php post json参数的传递和接收处理方法
2018/05/31 PHP
tp5(thinkPHP5框架)使用DB实现批量删除功能示例
2019/05/28 PHP
通过jQuery源码学习javascript(三)
2012/12/27 Javascript
JS字符串截取函数实例
2013/12/27 Javascript
js 动态为textbox添加下拉框数据源的方法
2014/04/24 Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
2015/06/19 Javascript
Angular.js如何从PHP读取后台数据
2016/03/24 Javascript
Js获取当前日期时间及格式化代码
2016/09/17 Javascript
JS实现PC手机端和嵌入式滑动拼图验证码三种效果
2017/02/15 Javascript
JavaScript字符串检索字符的方法
2017/06/23 Javascript
JS实现加载时锁定HTML页面元素的方法
2017/06/24 Javascript
vue2.0使用swiper组件实现轮播的示例代码
2018/03/03 Javascript
JavaScript静态作用域和动态作用域实例详解
2019/06/17 Javascript
vue 实现cli3.0中使用proxy进行代理转发
2019/10/30 Javascript
Vue+Element ui 根据后台返回数据设置动态表头操作
2020/09/21 Javascript
[53:20]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 VG vs OG
2018/04/03 DOTA
Python中的字符串操作和编码Unicode详解
2017/01/18 Python
浅谈django model的get和filter方法的区别(必看篇)
2017/05/23 Python
python实现简单淘宝秒杀功能
2018/05/03 Python
python3 tkinter实现添加图片和文本
2019/11/26 Python
基于python求两个列表的并集.交集.差集
2020/02/10 Python
Python自动化测试中yaml文件读取操作
2020/08/20 Python
html5 标签
2009/07/16 HTML / CSS
Html5跳转到APP指定页面的实现
2020/01/14 HTML / CSS
Under Armour安德玛中国官网:美国高端运动科技品牌
2018/03/09 全球购物
总经理助理岗位职责
2013/11/08 职场文书
应征英语教师求职信
2013/11/27 职场文书
竞聘演讲稿精彩开头和结尾
2014/05/14 职场文书
2014年群众路线教育实践活动整改措施
2014/09/24 职场文书
公安交警中队队长个人对照检查材料思想汇报
2014/10/05 职场文书
幼儿教师2014年度工作总结
2014/12/16 职场文书
财务会计岗位职责
2015/02/03 职场文书