如何基于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 相关文章推荐
40款非常棒的jQuery 插件和制作教程(系列二)
Nov 02 Javascript
关于Javascript与iframe的那些事儿
Jul 04 Javascript
JavaScript在for循环中绑定事件解决事件参数不同的情况
Jan 20 Javascript
jquery+php实现搜索框自动提示
Nov 28 Javascript
JS组件Bootstrap Table布局详解
May 27 Javascript
微信小程序购物商城系统开发系列-目录结构介绍
Nov 21 Javascript
JS常用加密编码与算法实例总结
Dec 22 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
Mar 17 Javascript
Angular实现响应式表单
Aug 04 Javascript
常用的 JS 排序算法 整理版
Apr 05 Javascript
AngularJS中的作用域实例分析
May 16 Javascript
vue使用echarts画组织结构图
Feb 06 Vue.js
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遍历目录并返回统计目录大小
2014/06/09 PHP
PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】
2017/08/11 PHP
PHP检测接口Traversable用法详解
2017/12/29 PHP
jquery下组织javascript代码(js函数化)
2010/08/25 Javascript
Jquery实现的一种常用高亮效果示例代码
2014/01/28 Javascript
使用纯javascript实现经典扫雷游戏
2015/04/23 Javascript
浅析JavaScript Array和string的转换(推荐)
2016/05/20 Javascript
利用原生JS自动生成文章标题树的实例
2016/08/22 Javascript
HTML5 js实现拖拉上传文件功能
2020/11/20 Javascript
js登录滑动验证的实现(不滑动无法登陆)
2018/01/03 Javascript
在vue项目中使用Nprogress.js进度条的方法
2018/01/31 Javascript
vue的安装及element组件的安装方法
2018/03/09 Javascript
vue.js使用v-pre与v-html输出HTML操作示例
2018/07/07 Javascript
JavaScript实现抖音罗盘时钟
2019/10/11 Javascript
基础的十进制按位运算总结与在Python中的计算示例
2016/06/28 Python
python 3.6.4 安装配置方法图文教程
2018/09/18 Python
Python实现批量执行同目录下的py文件方法
2019/01/11 Python
使用python实现抓取腾讯视频所有电影的爬虫
2019/04/15 Python
在python tkinter中Canvas实现进度条显示的方法
2019/06/14 Python
pytorch:model.train和model.eval用法及区别详解
2020/02/20 Python
Python字典fromkeys()方法使用代码实例
2020/07/20 Python
python利用google翻译方法实例(翻译字幕文件)
2020/09/21 Python
Python中qutip用法示例详解
2020/10/02 Python
Python实现壁纸下载与轮换
2020/10/19 Python
移动端rem布局的两种实现方法
2018/01/03 HTML / CSS
荷兰睡眠专家:Beter Bed
2020/11/23 全球购物
电信营业员自我评价分享
2014/01/17 职场文书
机关副主任个人四风问题整改措施
2014/09/26 职场文书
教师节寄语2015
2015/03/23 职场文书
幼儿园食品安全责任书
2015/05/08 职场文书
个人更名证明
2015/06/23 职场文书
小学教师暑期培训心得体会
2016/01/09 职场文书
演讲稿之我的初心我的成长
2019/08/12 职场文书
MySQL 常见的数据表设计误区汇总
2021/06/07 MySQL
一定要知道的 25 个 Vue 技巧
2021/11/02 Vue.js
《辉夜大小姐想让我告白》第三季正式预告
2022/03/20 日漫