• 欢迎访问web前端中文站,JavaScript,CSS3,HTML5,web前端demo
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏web前端中文站吧

判断单、多张图片加载完成

JavaScript web前端中文站 2年前 (2017-05-02) 772次浏览 未收录 0个评论

在实际的运用中有这样一种场景,某资源加载完成后再执行某个操作,例如在做导出时,后端通过打开模板页生成 PDF,并返回下载地址。这时前后端通常需要约定一个 flag,用以标识模板准备就绪,可以生成 PDF 了。

更多精彩内容请看 web 前端中文站
http://www.lisa33xiaoq.net 可按 Ctrl + D 进行收藏

试想,如果模板中有图片,此时如何判断图片是否加载完成?

在此之前来了解一下 jquery 的 ready 与 window.onload 的区别,ready 只是 dom 结构加载完毕,便视为加载完成。(此时图片没有加载完毕),onload 是指 dom 的生成和资源完全加载(比如 flash、图片)出来后才执行。接下来回到正题,先从单张图片说起。

(1)、单张图片(图片在文档中)

// HTML <img id='xiu' src="http://www.daqianduan.com/wp-content/uploads/2014/11/hs-xiu.jpg"> ?  //js  $(document).ready(function(){      //jquery     $('#xiu').load(function(){        // 加载完成      });     //原生  onload     var xiu = document.getElementById('xiu')     xiu.onload = xiu.onreadystatechange = function(){        if(!this.readyState||this.readyState=='loaded'||this.readyState=='complete'){            // 加载完成         }     };  })

注:
1、IE8 及以下版本不支持 onload 事件,但支持 onreadystatechange 事件;
2、readyState 是 onreadystatechange 事件的一个状态,值为 loaded 或 complete 的时候,表示已经加载完毕。
3、以下内容省略兼容

(2)、单张图片(图片动态生成)

//js  var xiu = new Image()  xiu.src = 'http://www.daqianduan.com/wp-content/uploads/2014/11/hs-xiu.jpg'  xiu.onload = function(){     // 加载完成   }

(3)、单张图片(结合 ES6 Promise)

//js  new Promise((resolve, reject)=>{     let xiu = new Image()     xiu.src = 'http://www.daqianduan.com/wp-content/uploads/2014/11/hs-xiu.jpg'     xiu.onload = function(){        // 加载完成         resolve(xiu)     }  }).then((xiu)=>{  //code  })

(4)、多张图片

var img = [],       flag = 0,      mulitImg = [     'http://www.daqianduan.com/wp-content/uploads/2017/03/IMG_0119.jpg',     'http://www.daqianduan.com/wp-content/uploads/2017/01/1.jpg',     'http://www.daqianduan.com/wp-content/uploads/2015/11/jquery.jpg',     'http://www.daqianduan.com/wp-content/uploads/2015/10/maid.jpg'  ];  var imgTotal = mulitImg.length;  for(var i = 0 ; i < imgTotal ; i++){     img[i] = new Image()     img[i].src = mulitImg[i]     img[i].onload = function(){        //第 i 张图片加载完成        flag++        if( flag == imgTotal ){           //全部加载完成        }     }  }

(5)、多张图片(结合 ES6 Promise.all())

【注:本文源自网络文章资源,由站长整理发布】

  let mulitImg = [      'http://www.daqianduan.com/wp-content/uploads/2017/03/IMG_0119.jpg',      'http://www.daqianduan.com/wp-content/uploads/2017/01/1.jpg',      'http://www.daqianduan.com/wp-content/uploads/2015/11/jquery.jpg',      'http://www.daqianduan.com/wp-content/uploads/2015/10/maid.jpg'  ];  let promiseAll = [], img = [], imgTotal = mulitImg.length;  for(let i = 0 ; i < imgTotal ; i++){      promiseAll[i] = new Promise((resolve, reject)=>{          img[i] = new Image()          img[i].src = mulitImg[i]          img[i].onload = function(){               //第 i 张加载完成               resolve(img[i])          }      })  }  Promise.all(promiseAll).then((img)=>{      //全部加载完成  })

web 前端中文站 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:判断单、多张图片加载完成
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址