如何基于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之水平横向滚动歌词同步的应用
May 07 Javascript
IE与Firefox在JavaScript上的7个不同写法小结
Sep 14 Javascript
JqGrid web打印实现代码
May 31 Javascript
js如何设置在iframe框架中指定div不显示
Dec 04 Javascript
页面按钮禁用与解除禁用的方法
Feb 19 Javascript
jQuery对象的length属性用法实例
Dec 27 Javascript
基于jQuery实现的美观星级评论打分组件代码
Oct 30 Javascript
简单学习JavaScript中的for语句循环结构
Nov 10 Javascript
跟我学习javascript的call(),apply(),bind()与回调
Nov 16 Javascript
Angular 应用技巧总结
Sep 14 Javascript
vue中使用ueditor富文本编辑器
Feb 08 Javascript
Vue项目数据动态过滤实践及实现思路
Sep 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源代码
2006/10/09 PHP
PHP令牌 Token改进版
2008/07/18 PHP
PHP文件打开、关闭、写入的判断与执行代码
2011/05/24 PHP
php实现telnet功能示例
2014/04/08 PHP
PHP获取网页标题的3种实现方法代码实例
2014/04/11 PHP
php将图片保存为不同尺寸图片的图片类实例
2015/03/30 PHP
分享一个漂亮的php验证码类
2016/09/29 PHP
jQuery formValidator表单验证插件开源了 含API帮助、源码、示例
2008/08/14 Javascript
jquery中 $.expr使用实例介绍
2014/06/09 Javascript
js实现对ajax请求面向对象的封装
2016/01/08 Javascript
Bootstrap选项卡动态切换效果
2016/11/28 Javascript
JS实现简单的二元方程计算器功能示例
2017/01/03 Javascript
vue做移动端适配最佳解决方案(亲测有效)
2018/09/04 Javascript
vue实现微信获取用户信息的方法
2019/03/21 Javascript
JavaScript数组及常见操作方法小结
2019/11/13 Javascript
[45:40]Ti4 冒泡赛第二天NEWBEE vs NaVi 1
2014/07/15 DOTA
[02:33]DOTA2亚洲邀请赛趣味视频之吐真话筒
2018/03/31 DOTA
Python图片裁剪实例代码(如头像裁剪)
2017/06/21 Python
详解Python3.6安装psutil模块和功能简介
2018/05/30 Python
python 常见字符串与函数的用法详解
2018/11/23 Python
Python 读取xml数据,cv2裁剪图片实例
2020/03/10 Python
pyinstaller打包找不到文件的问题解决
2020/04/15 Python
opencv 图像加法与图像融合的实现代码
2020/07/08 Python
利用CSS3实现文字折纸效果实例代码
2018/07/10 HTML / CSS
HTML5 script元素async、defer异步加载使用介绍
2013/08/23 HTML / CSS
举例说明类变量和实例变量的区别
2016/06/30 面试题
财务部岗位职责
2013/11/19 职场文书
模范家庭事迹材料
2014/02/10 职场文书
护理专业自荐信范文
2014/02/26 职场文书
2014年学生资助工作总结
2014/12/18 职场文书
和谐拯救危机观后感
2015/06/15 职场文书
毕业论文答辩演讲稿
2015/06/23 职场文书
教研活动主持词
2015/07/03 职场文书
请假条应该怎么写?
2019/06/24 职场文书
Python insert() / append() 用法 Leetcode实战演示
2021/03/31 Python
海康机器人重磅发布全新算法开发平台VM4.2
2022/04/21 数码科技