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

2017-04-12 1270 4 编辑:深圳网站建设 来源:互联网

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

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

在此之前来了解一下query的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( loaded == 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)=>{

     //全部加载完成

 })

专业的网站建设公司,深正互联,如您有网站营销需求,请您关注我们,或者致电13828884598


本站文章均为深正网站建设摘自权威资料,书籍,或网络原创文章,如有版权纠纷或者违规问题,请即刻联系我们删除,我们欢迎您分享,引用和转载,但谢绝直接搬砖和抄袭!感谢...
关注深正互联
我们猜你喜欢