如何基于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 相关文章推荐
html下载本地
Jun 19 Javascript
utf-8编码引起js输出中文乱码的解决办法
Jun 23 Javascript
jquery png 透明解决方案(推荐)
Aug 21 Javascript
js获取微信版本号的方法
May 12 Javascript
JavaScript中toString()方法的使用详解
Jun 05 Javascript
深入学习JavaScript中的原型prototype
Aug 13 Javascript
JavaScript 中 apply 、call 的详解
Mar 21 Javascript
ES6新特性一: let和const命令详解
Apr 20 Javascript
JavaScript实现异步图像上传功能
Jul 12 Javascript
用jQuery将JavaScript对象转换为querystring查询字符串的方法
Nov 12 jQuery
解决vue动态路由异步加载import组件,加载不到module的问题
Jul 26 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
Feb 18 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模拟SQL Server的两个日期处理函数
2006/10/09 PHP
简化php模板页面中分页代码的解析
2009/02/06 PHP
PHP 文件上传功能实现代码
2009/06/24 PHP
php中操作memcached缓存进行增删改查数据的实现代码
2014/08/15 PHP
如何使用PHP Embed SAPI实现Opcodes查看器
2015/11/10 PHP
JS 控制CSS样式表
2009/08/20 Javascript
基于jquery实现的上传图片及图片大小验证、图片预览效果代码
2011/04/12 Javascript
javascript面向对象编程代码
2011/12/19 Javascript
多次注册事件会导致一个事件被触发多次的解决方法
2013/08/12 Javascript
使图片旋转的3种解决方案
2013/11/21 Javascript
JavaScript跨域方法汇总
2014/10/16 Javascript
jQuery实现流动虚线框的方法
2015/01/29 Javascript
JavaScript基础函数整理汇总
2015/01/30 Javascript
javascript上下方向键控制表格行选中并高亮显示的方法
2015/02/13 Javascript
window.open不被拦截的简单实现代码(推荐)
2016/08/04 Javascript
AngularJS 作用域详解及示例代码
2016/08/17 Javascript
AngularJs  Understanding Angular Templates
2016/09/02 Javascript
JS实现物体带缓冲的间歇运动效果示例
2016/12/22 Javascript
Node.js 中使用 async 函数的方法
2017/11/20 Javascript
vue实现重置表单信息为空的方法
2018/09/29 Javascript
ant-design-vue 实现表格内部字段验证功能
2019/12/16 Javascript
[01:04]DOTA2:伟大的Roshan雕塑震撼来临
2015/01/30 DOTA
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
2016/06/07 Python
python 删除非空文件夹的实例
2018/04/26 Python
基于Python3.6+splinter实现自动抢火车票
2018/09/25 Python
python感知机实现代码
2019/01/18 Python
python pandas dataframe 去重函数的具体使用
2020/07/20 Python
python包的导入方式总结
2021/03/02 Python
css3模拟jq点击事件的实例代码
2017/07/06 HTML / CSS
英国最大的户外商店:Go Outdoors
2019/04/17 全球购物
曼城官方网上商店:Manchester City
2019/09/10 全球购物
软件测试工程师面试问题精选
2016/10/28 面试题
骨干教师考核方案
2014/05/09 职场文书
工会换届选举方案
2014/05/21 职场文书
详解前端任务构建利器Gulp.js使用指南
2021/04/30 Javascript
Python实现位图分割的效果
2021/11/20 Python