如何基于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 相关文章推荐
基于jquery &amp; json的省市区联动代码
Jun 26 Javascript
把文本中的URL地址转换为可点击链接的JavaScript、PHP自定义函数
Jul 29 Javascript
jQuery中trigger()方法用法实例
Jan 19 Javascript
使用Jquery实现每日签到功能
Apr 03 Javascript
jQuery插件开发精品教程(让你的jQuery更上一个台阶)
Nov 07 Javascript
JS中artdialog弹出框控件之提交表单思路详解
Apr 18 Javascript
Input文本框随着输入内容多少自动延伸的实现
Feb 15 Javascript
AngularJS实时获取并显示密码的方法
Feb 06 Javascript
Vue.js 动态为img的src赋值方法
Mar 14 Javascript
详解Vue项目在其他电脑npm run dev运行报错的解决方法
Oct 29 Javascript
JavaScript数组特性与实践应用深入详解
Dec 30 Javascript
20道JS原理题助你面试一臂之力(必看)
Jul 22 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
关于PHP5 Session生命周期介绍
2010/03/02 PHP
PHP源代码数组统计count分析
2011/08/02 PHP
PHP有序表查找之二分查找(折半查找)算法示例
2018/02/09 PHP
PHP中soap用法示例【SoapServer服务端与SoapClient客户端编写】
2018/12/25 PHP
网页里控制图片大小的相关代码
2006/06/13 Javascript
js 表格隔行颜色
2009/12/02 Javascript
JSON.parse 解析字符串出错的解决方法
2010/07/08 Javascript
浅析javascript 定时器
2014/12/23 Javascript
jQuery ajax MD5实现用户注册即时验证功能
2016/10/11 Javascript
js编写选项卡效果
2017/05/23 Javascript
javascript导出csv文件(excel)的方法示例
2019/08/25 Javascript
在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
2015/05/02 Python
python判断一个集合是否包含了另外一个集合中所有项的方法
2015/06/30 Python
Django的HttpRequest和HttpResponse对象详解
2018/01/26 Python
python批量修改图片大小的方法
2018/07/24 Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
2019/08/10 Python
django 连接数据库 sqlite的例子
2019/08/14 Python
Python Tkinter Entry和Text的添加与使用详解
2020/03/04 Python
Jupyter打开图形界面并画出正弦函数图像实例
2020/04/24 Python
如何将PySpark导入Python的放实现(2种)
2020/04/26 Python
python简单实现9宫格图片实例
2020/09/03 Python
Linux系统下升级pip的完整步骤
2021/01/31 Python
CSS3+Sprite实现僵尸行走动画特效源码
2016/01/27 HTML / CSS
Vans奥地利官方网站:美国原创极限运动潮牌
2018/09/30 全球购物
设计毕业生简历中的自我评价
2013/10/01 职场文书
个人自我鉴定范文
2013/10/04 职场文书
会计电算化专业应届大学生求职信
2013/10/22 职场文书
应届毕业生的自我鉴定
2013/11/13 职场文书
行政办公员自我评价分享
2013/12/14 职场文书
捐款倡议书范文
2014/02/02 职场文书
电子商务个人职业生涯规划范文
2014/02/12 职场文书
西式婚礼主持词
2014/03/13 职场文书
农村婚庆司仪主持词
2014/03/15 职场文书
2015年仓管员工作总结
2015/04/21 职场文书
表扬信格式模板
2015/05/05 职场文书
观看《杨善洲》宣传教育片心得体会
2016/01/23 职场文书