如何基于JavaScript判断图片是否加载完成


Posted in Javascript onDecember 28, 2019

这篇文章主要介绍了如何基于JavaScript判断图片是否加载完成,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

这里我用了一个tag来判断显示哪个样式,但是tag是写在了setTimeOut里面的,是一个延时函数,异步的操作。延时300ms的目的就是为了等待图片加载出来,但是当网络慢的时候是满足不了的。网络慢图片没有加载出来300ms之后就会直接走入false,会提示用户重新获取图片,但其实图片已经返回回来了。

所以这样的做法是很不灵活的。

刚开始的代码如下:

html:

<div v-if="!it.sealTag"><br><img :src="it.style"><br></div><br><div v-if="it.sealTag && it.isSys" style="margin-top:70px;">
  <p >图片丢失,请点击<span @click="resetSign()">重新生成</span></p>
</div>js

js修改前:

this.list = res.data;
this.list.forEach((it) => {
  it.style = catUrl()+'seal/pic/' + it.sealPath;
  //判断sealpath能不能使用
  let ImgObj = new Image(); //判断图片是否存在 
  ImgObj.src = catUrl()+'seal/pic/' + it.sealPath;
  setTimeout(()=>{
    if (ImgObj.fileSize > 0 || (ImgObj.width > 0 && ImgObj.height > 0)) {
      //false:sealpath不可用,true:sealPath可用
      this.$set(it,'sealTag',true);
     } else { 
      this.sealId = it.id;
      this.$set(it,'sealTag',false);
   }
},300)});

不能用setTimeOut()的原因是,网络慢的时候图片没有加载出来,ImgObj.fileSize,ImgObj.width,ImgObj.height这些都不存在,就返回到false。而等图片加载出来的时候,vue页面早就渲染完了。

解决办法

此时用img的onload方法判断图片是否已经加载完成。

js修改后:

this.list = res.data;
this.list.forEach((it) => {
//判断sealpath能不能使用
let ImgObj = new Image(); 
//判断图片是否存在 
ImgObj.onload = () => {
  if (ImgObj.fileSize > 0 || (ImgObj.width > 0 && ImgObj.height > 0)) { // 判断图片的sealpath能不能正常显示图片
  // sealTag:false 不显示 重新生成 的提示
  this.$set(it,'sealTag',false);
  }
}
// sealTag:true 要显示 重新生成 的提示
 ImgObj.onerror = () => {
  this.sealId = it.id;
  this.$set(it,'sealTag',true);
 }
  it.style = catUrl()+'seal/pic/' + it.sealPath;
  ImgObj.src = catUrl()+'seal/pic/' + it.sealPath;
});

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
node.js 一个简单的页面输出实现代码
Mar 07 Javascript
深入理解JavaScript系列(45):代码复用模式(避免篇)详解
Mar 04 Javascript
深入理解JavaScript编程中的原型概念
Jun 25 Javascript
Jquery Mobile 自定义按钮图标
Nov 18 Javascript
基于Javascript实现二级联动菜单效果
Mar 04 Javascript
详细谈谈javascript的对象
Jul 31 Javascript
Jq通过td获取同行其它列td的方法
Oct 05 Javascript
通过webpack引入第三方库的方法
Jul 20 Javascript
微信小程序自定义tabBar组件开发详解
Sep 24 Javascript
js实现简单模态框实例
Nov 16 Javascript
JS中的一些常用的函数式编程术语
Jun 15 Javascript
Vue项目结合Vue-layer实现弹框式编辑功能(实例代码)
Mar 11 Javascript
Vue页面刷新记住页面状态的实现
Dec 27 #Javascript
uni-app 组件里面获取元素宽高的实现
Dec 27 #Javascript
Vue中axios拦截器如何单独配置token
Dec 27 #Javascript
JavaScript获取当前url路径过程解析
Dec 27 #Javascript
前端开发之便利店收银系统代码
Dec 27 #Javascript
JavaScript setInterval()与setTimeout()计时器
Dec 27 #Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
Dec 27 #Javascript
You might like
php获取数组中重复数据的两种方法
2013/06/28 PHP
PHP遍历目录并返回统计目录大小
2014/06/09 PHP
Yii2中设置与获取别名的函数(setAlias和getAlias)用法分析
2016/07/25 PHP
解决php extension 加载顺序问题
2019/08/16 PHP
jQuery 事件队列调整方法
2009/09/18 Javascript
使用jquery中height()方法获取各种高度大全
2014/04/02 Javascript
深入探寻javascript定时器
2015/01/02 Javascript
javascript实现图像循环明暗变化的方法
2015/02/25 Javascript
JS中字符串trim()使用示例
2015/05/26 Javascript
轻松掌握JavaScript单例模式
2016/08/25 Javascript
详解jQuery中基本的动画方法
2016/12/14 Javascript
微信小程序picker组件关于objectArray数据类型的绑定方法
2019/03/13 Javascript
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
vue项目中在可编辑div光标位置插入内容的实现代码
2020/01/07 Javascript
jquery实现吸顶导航效果
2020/01/08 jQuery
JS Generator 函数的含义与用法实例总结
2020/04/08 Javascript
python分割文件的常用方法
2014/11/01 Python
Python的Urllib库的基本使用教程
2015/04/30 Python
Python程序中用csv模块来操作csv文件的基本使用教程
2016/03/03 Python
Python3编程实现获取阿里云ECS实例及监控的方法
2017/08/18 Python
浅谈dataframe中更改列属性的方法
2018/07/10 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
2019/04/03 Python
Opencv实现抠图背景图替换功能
2019/05/21 Python
Numpy 中的矩阵求逆实例
2019/08/26 Python
pytorch 图像中的数据预处理和批标准化实例
2020/01/15 Python
Python中BeautifulSoup通过查找Id获取元素信息
2020/12/07 Python
德国电子商城:ComputerUniverse
2017/04/21 全球购物
欧洲有机婴儿食品最大的市场:Organic Baby Food(供美国和加拿大)
2018/03/28 全球购物
UDP协议功能
2013/01/06 面试题
为什么要用EJB
2014/04/17 面试题
机电专业个人求职信范文
2013/12/30 职场文书
户外活动总结范文
2014/04/30 职场文书
2015年工程部工作总结
2015/04/30 职场文书
会议主持词通用版
2019/04/02 职场文书
解决sql server 数据库,sa用户被锁定的问题
2021/06/11 SQL Server
MySQL如何使用使用Xtrabackup进行备份和恢复
2021/06/21 MySQL