SEARCH

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

发布日期:2018年06月20日,网站分类:网站新闻

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


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


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


$('img').on('load', function() {
    alert('new image loaded: ' + this.src);
});


原生js


imgNode.onload = () => {
    alert('new image loaded: ' + this.src);
};


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


// HTML
<img id='pic' src="https://cloud.rongkeji.cn/a/a3.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事件来解决兼容问题。


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


//js
var pic = new Image()
pic.src = 'https://cloud.rongkeji.cn/a/a3.png'
pic.onload = pic.onreadystatechange = function(){
	if(!this.readyState||this.readyState=='loaded'||this.readyState=='complete'){
	// 加载完成 
	}
};

//jquery
$('').attr('src', 'https://cloud.rongkeji.cn/a/a3.png').on('load', function() {
   $(this).remove(); // 防止内存泄露
   //图片加载完毕
});


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


//js
 new Promise((resolve, reject)=>{
    let pic = new Image()
    pic.src = 'https://cloud.rongkeji.cn/a/a3.png'
    pic.onload = function(){
       // 加载完成 
       resolve(pic)
    }
 }).then((pic)=>{
 //code
 })


四、多张图片


var img = [],  
    flag = 0, 
    mulitImg = [
    'https://cloud.rongkeji.cn/a/a1.png',
    'https://cloud.rongkeji.cn/a/a2.png',
    'https://cloud.rongkeji.cn/a/a3.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 ){
    //           //全部加载完成
    //        }
    //    }
    // };
 }


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


let mulitImg = [
    'https://cloud.rongkeji.cn/a/a1.png',
    'https://cloud.rongkeji.cn/a/a2.png',
    'https://cloud.rongkeji.cn/a/a3.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)=>{
     //全部加载完成
 })


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


$('').attr('src', 'https://cloud.rongkeji.cn/a/a3.png').on('load', function() {
   $(this).remove(); // prevent memory leaks as @benweet suggested
   $('body').css('background-image', 'url(https://cloud.rongkeji.cn/a/a3.png)');
});



关键词:网站建设 网站设计

转载请注明来自:https://www.kufan.cn/news/130.html


上一篇:网站表单通过金数据表单接口添加数据实例

下一篇:网站显示 “ No input file specified ” 解决方法

地区分布

  • Da Tong
  • He Fei

昆明酷番网络科技有限公司

地址:昆明市官渡区鑫都韵城6栋20-B06

提供了定制化的行业网站建设解决方案

昆明酷番网络科技有限公司

地址:昆明市官渡区鑫都韵城6号楼20-B06

酷番建站技术服务,助您打造高端形象

公众号

微信公众号