帮助中心 >  技术知识库 >  网站相关 >  程序开发 >  jquery判断图片或者背景图片加载完毕

jquery判断图片或者背景图片加载完毕

2019-06-05 16:14:32 7562

前端开发制作中有需要需要等到页面中的图片加载完毕后才执行某些事件,而使用jquery的load事件只是dom执行完毕,图片未必加载完成,如果要判断图片加载完毕,需要在图片标签上判断。


使用JavaScript判断图片加载完毕,如果图片在页面中的某个img标签中的话,可以用下面这个


$('img').on('load', function() {

    alert('new image loaded: ' + this.src);

});

原生js



imgNode.onload = () => {

    alert('new image loaded: ' + this.src);

};

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



// HTML

<img id='pic' src="../03.png">  


//js

 $(document).ready(function(){


    //jquery

    $('#pic').load(function(){

       // 加载完成 

    });


   //原生  onload

    var pic = document.getElementById('pic')

    pic.onload = pic.onreadystatechange = function(){

       if(!this.readyState||this.readyState=='loaded'||this.readyState=='complete'){

           // 加载完成 

       }

    };


})

注:

1、IE8及以下版本不支持onload事件,但支持onreadystatechange事件;

2、readyState是onreadystatechange事件的一个状态,值为loaded或complete的时候,表示已经加载完毕。

3、如果引入jquery库可以考虑直接使用jquery的load事件来解决兼容问题。


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



//js

var pic = new Image()

pic.src = '../03.png'

pic.onload = pic.onreadystatechange = function(){

if(!this.readyState||this.readyState=='loaded'||this.readyState=='complete'){

// 加载完成 

}

};


//jquery

$('<img/>').attr('src', '../03.png').on('load', function() {

   $(this).remove(); // 防止内存泄露

   //图片加载完毕

});

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



//js

 new Promise((resolve, reject)=>{

    let pic = new Image()

    pic.src = '../03.png'

    pic.onload = function(){

       // 加载完成 

       resolve(pic)

    }

 }).then((pic)=>{

 //code

 })

(4)、多张图片



var img = [],  

    flag = 0, 

    mulitImg = [

    '../01.png',

    '../02.png',

    '../03.png'

 ];

 var imgTotal = mulitImg.length;

 for(var i = 0 ; i < imgTotal ; i++){

    img[i] = new Image()

    img[i].src = mulitImg[i]

    var pic = img[i];

    //用jquery

    $(pic).on('load',function(){

    $(this).remove();

    flag++

    if(flag==imgTotal){

    //全部加载完成

    }

    })

    //原生js

    // img[i].onload = img[i].onreadystatechange = function(){

    //    if(!this.readyState||this.readyState=='loaded'||this.readyState=='complete'){

    //        //第i张图片加载完成

    //        flag++

    //        if( flag == imgTotal ){

    //           //全部加载完成

    //        }

    //    }

    // };

 }

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



let mulitImg = [

    '../01.png',

    '../02.png',

    '../03.png'

 ];

 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)=>{

     //全部加载完成

 })

如何判断背景图片加载完毕?



$('<img/>').attr('src', '../01.png').on('load', function() {

   $(this).remove(); // prevent memory leaks as @benweet suggested

   $('body').css('background-image', 'url(../01.png)');

});


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: