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


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

    转:http://www.daqianduan.com/6419.html

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

    在此之前来了解一下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)=>{
         //全部加载完成
     })
    

      

    
    
  • 相关阅读:
    【matlab】meshgrid生成网格原理1
    【Matlab】matlab与matplotlib作图比较
    【信号、图像、Matlab】如何得到高斯滤波器的整数模板
    【GPS】如何理解轨道倾角大于90
    【Matlab】图像裁剪函数imcrop的原点、长度、宽度问题
    【Matlab】函数imread的返回值
    【GPS】批量将d文件转换为o文件
    【GPS】d文件转换为o文件
    【GPS】IGS数据下载
    [ubuntu]截图快捷键
  • 原文地址:https://www.cnblogs.com/liangziaha/p/15742921.html
Copyright © 2020-2023  润新知