如何基于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 读取XML数据,在页面中展现、编辑、保存的实现
Oct 27 Javascript
使用IE6看老赵的博客 jQuery初探
Jan 17 Javascript
url地址自动加#号问题说明
Aug 21 Javascript
JS简单实现元素复制示例附图
Nov 19 Javascript
jQuery实现跟随鼠标运动图层效果的方法
Feb 02 Javascript
jquery实现浮动在网页右下角的彩票开奖公告窗口代码
Sep 04 Javascript
javascript 数组去重复(在线去重工具)
Dec 17 Javascript
jquery实现折叠菜单效果【推荐】
Mar 08 Javascript
详解Angular之constructor和ngOnInit差异及适用场景
Jun 22 Javascript
分析JS中this引发的bug
Dec 12 Javascript
在vue中封装可复用的组件方法
Mar 01 Javascript
node.js使用redis储存session的方法
Sep 26 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.ini中文版(2)
2006/10/09 PHP
PHP对MongoDB[NoSQL]数据库的操作
2013/03/01 PHP
基于PHPExcel的常用方法总结
2013/06/13 PHP
php基于PDO连接MSSQL示例DEMO
2016/07/13 PHP
Laravel5.1自定义500错误页面示例
2016/10/09 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
javascript之通用简单的table选项卡实现(二)
2010/05/09 Javascript
JavaScript XML和string相互转化实现代码
2011/07/04 Javascript
基于OO的动画附加插件,可以实现弹跳、渐隐等动画效果 分享
2013/06/24 Javascript
Jquery实现控件的隐藏和显示实例
2014/02/08 Javascript
js判断当页面无法回退时关闭网页否则就history.go(-1)
2014/08/07 Javascript
Kindeditor在线文本编辑器如何过滤HTML
2016/04/14 Javascript
Vue input控件通过value绑定动态属性及修饰符的方法
2017/05/03 Javascript
原生JS封装_new函数实现new关键字的功能
2018/08/12 Javascript
layui-laydate时间日历控件使用方法详解
2018/11/15 Javascript
Vue组件通信入门之Provide和Inject机制
2019/12/29 Javascript
js实现贪吃蛇游戏 canvas绘制地图
2020/09/09 Javascript
解决Vue-cli无法编译es6的问题
2020/10/30 Javascript
python里将list中元素依次向前移动一位
2014/09/12 Python
深入理解python函数递归和生成器
2016/06/06 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
2018/02/08 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
2019/06/18 Python
python创建属于自己的单词词库 便于背单词
2019/07/30 Python
Python根据服务获取端口号的方法
2019/09/25 Python
HTML5 manifest离线缓存的示例代码
2018/08/08 HTML / CSS
德国家具在线:Fashion For Home
2017/03/11 全球购物
Casadei卡萨蒂官网:意大利奢侈鞋履品牌
2017/10/28 全球购物
马来西亚演唱会订票网站:StubHub马来西亚
2018/10/18 全球购物
阿玛尼美妆英国官网:Giorgio Armani Beauty英国
2019/03/28 全球购物
JAVA程序设计笔试题面试题一套
2015/07/28 面试题
探亲邀请信范文
2014/01/30 职场文书
工资收入证明样本(5篇)
2014/09/16 职场文书
补充协议书
2015/01/28 职场文书
2015年党风廉政建设责任书
2015/01/29 职场文书
离婚起诉书范本
2015/05/18 职场文书
22句经典语录:送给优柔寡断和胡思乱想的朋友们
2019/12/13 职场文书