如何基于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 相关文章推荐
JavaScript控制Session操作方法
Jan 17 Javascript
JS 修改URL参数(实现代码)
Jul 08 Javascript
禁止iframe页面的所有js脚本如alert及弹出窗口等
Sep 03 Javascript
用javascript实现自动输出网页文本
Jul 30 Javascript
jquery代码实现多选、不同分享功能
Jul 31 Javascript
jQuery实现Tab菜单滚动切换的方法
Sep 21 Javascript
javascript伸缩菜单栏实现代码分享
Nov 12 Javascript
jquery+ajax实现直接提交表单实例分析
Jun 17 Javascript
Angular2进阶之如何避免Dom误区
Apr 02 Javascript
详解基于Koa2开发微信二维码扫码支付相关流程
May 16 Javascript
小程序实现图片预览裁剪插件
Nov 22 Javascript
JS高级程序设计之class继承重点详解
Jul 07 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
建立动态的WML站点(三)
2006/10/09 PHP
PHP中redis的用法深入解析
2014/02/20 PHP
php操作csv文件代码实例汇总
2014/09/22 PHP
PHP单链表的实现代码
2016/07/05 PHP
php基于curl主动推送最新内容给百度收录的方法
2016/10/14 PHP
JQuery 简便实现页面元素数据验证功能
2007/03/24 Javascript
js 颜色选择器(兼容firefox)
2009/03/05 Javascript
JS无限极树形菜单,json格式、数组格式通用示例
2013/07/30 Javascript
前端微信支付js代码
2016/07/25 Javascript
jQuery ztree实现动态树形多选菜单
2016/08/12 Javascript
浅谈jquery设置和获得checkbox选中的问题
2016/08/19 Javascript
Bootstrap字体图标无法正常显示的解决方法
2016/10/08 Javascript
Node.js中路径处理模块path详解
2016/11/14 Javascript
javascript入门之数组[新手必看]
2016/11/21 Javascript
Angular+Node生成随机数的方法
2017/06/16 Javascript
Angular.JS中指令ng-if的注意事项小结
2017/06/21 Javascript
vuejs事件中心管理组件间的通信详解
2017/08/09 Javascript
基于canvas粒子系统的构建详解
2017/08/31 Javascript
vue使用keep-alive实现数据缓存不刷新
2017/10/21 Javascript
基于Vue实现可以拖拽的树形表格实例详解
2018/10/18 Javascript
详解如何用typescript开发koa2的二三事
2018/11/13 Javascript
[15:57]教你分分钟做大人:斧王
2014/10/30 DOTA
[02:11]2016国际邀请赛中国区预选赛最美TA采访现场玩家
2016/06/28 DOTA
python控制台中实现进度条功能
2015/11/10 Python
Python简单读取json文件功能示例
2017/11/30 Python
Django的CVB实例详解
2020/02/10 Python
pytorch加载自己的图像数据集实例
2020/07/07 Python
如何使用Python进行PDF图片识别OCR
2021/01/22 Python
Omio葡萄牙:全欧洲低价大巴、火车和航班搜索和比价
2019/02/09 全球购物
TCP/IP模型的分界线
2012/12/01 面试题
宿舍卫生检讨书
2014/01/16 职场文书
优秀中职教师事迹材料
2014/08/26 职场文书
公司承诺函范文
2015/01/21 职场文书
公司给客户的感谢信
2015/01/23 职场文书
教师旷工检讨书
2015/08/15 职场文书
SQL语法CONSTRAINT约束操作详情
2022/01/18 MySQL