如何基于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里的条件判断
Feb 27 Javascript
JavaScript中的Screen屏幕对象
Jan 16 Javascript
javascript instanceof 内部机制探析
Oct 15 Javascript
jQuery中校验时间格式的正则表达式小结
Sep 22 Javascript
JS字符串拼接在ie中都报错的解决方法
Mar 27 Javascript
Jquery插件实现点击获取验证码后60秒内禁止重新获取
Mar 13 Javascript
详解Node.js模块间共享数据库连接的方法
May 24 Javascript
CSS3 3D 技术手把手教你玩转
Sep 02 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
Oct 14 Javascript
利用JS实现简单的日期选择插件
Jan 23 Javascript
Angular实现较为复杂的表格过滤,删除功能示例
Dec 23 Javascript
利用chrome浏览器进行js调试并找出元素绑定的点击事件详解
Jan 30 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 获取文件路径(灵活应用__FILE__)
2013/02/15 PHP
thinkPHP中分页用法实例分析
2015/12/26 PHP
Linux下快速搭建php开发环境
2017/03/13 PHP
php中错误处理操作实例分析
2019/08/23 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
2020/02/27 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
jquery 图片Silhouette Fadeins渐显效果
2010/02/07 Javascript
Js event事件在IE、FF兼容性问题
2011/01/01 Javascript
Jquery颜色选择器ColorPicker实现代码
2012/11/14 Javascript
让js弹出窗口居前显示的实现方法
2013/07/10 Javascript
基于jquery实现放大镜效果
2015/08/17 Javascript
浅谈JavaScript变量的自动转换和语句
2016/06/12 Javascript
JS常用字符串方法(推荐)
2021/01/15 Javascript
禁用backspace网页回退功能的实现代码
2016/11/15 Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
2016/12/26 Javascript
javascript正则表达式模糊匹配IP地址功能示例
2017/01/06 Javascript
JavaScript实现动态添加Form表单元素的方法示例
2017/08/14 Javascript
JS实现按钮颜色切换效果
2020/09/05 Javascript
详解react内联样式使用webpack将px转rem
2018/09/13 Javascript
JS事件绑定的常用方式实例总结
2019/03/02 Javascript
vue以组件或者插件的形式实现throttle或者debounce
2019/05/22 Javascript
Vue实现多标签选择器
2019/11/28 Javascript
用JS实现一个简单的打砖块游戏
2019/12/11 Javascript
使用PreloadJS加载图片资源的基础方法详解
2020/02/03 Javascript
[02:08]什么藏在DOTA2 TI9“小紫本”里?斧王历险记告诉你!
2019/05/17 DOTA
Python三级菜单的实例
2017/09/13 Python
python在非root权限下的安装方法
2018/01/23 Python
Python实现ping指定IP的示例
2018/06/04 Python
CentOS下Python3的安装及创建虚拟环境的方法
2018/11/28 Python
python列表插入append(), extend(), insert()用法详解
2019/09/14 Python
丝芙兰巴西官方商城:SEPHORA巴西
2016/10/31 全球购物
青年教师培训方案
2014/02/06 职场文书
行政部工作岗位职责范本
2014/03/05 职场文书
学习雷锋做美德少年寄语大全
2014/04/09 职场文书
2014年全国法制宣传日宣传活动方案
2014/11/02 职场文书
JS + HTML 罗盘式时钟的实现
2021/05/21 Javascript