如何判斷單、多張圖片加載完成?

2017-04-12 1378 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


本站文章均為深正網站建設摘自權威資料,書籍,或網絡原創文章,如有版權糾紛或者違規問題,請即刻聯系我們刪除,我們歡迎您分享,引用和轉載,但謝絕直接搬磚和抄襲!感謝...
關注深正互聯
我們猜你喜歡
七星彩头尾