zoukankan      html  css  js  c++  java
  • 图片预加载

    第一种方法,异步回调,执行完这个函数,在回调<!DOCTYPE html<html lang="en"><head>

        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        
        <script>
            //创建数组 用于保存图片的对象
            var arr=[];
            var num=1;
            //创建图片对象
            var img=new Image();
            //把第一张图片加载到缓存中
            img.src="./image/icon/"+num+".gif";
         //添加这个图片
         arr.push(img);
    //给对象img 添加加载事件 img.addEventListener("load",loadHandler); //图片加载事件 function loadHandler(){//移除load事件,要吗都会在缓存中挂载 img.removeEventListener("load",loadHandler); //重新实例化img对象 img=new Image(); num++; if(num>6){ return; } //给img再次添加load事件,并调用自身 递归函数 也是回调函数 img.addEventListener("load",loadHandler); //在把下一张图片添加进来 就可以了 img.src="./image/icon/"+num+".gif"; } </script> </body> </html>

    第二种方式,在第一种的基础上 给img对象 添加属性 方便后期调用

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        
    
        <script>
            //首先把图片存入数组中
            var arr=[];
            for(i=1;i<=6;i++){
                arr.push("./image/icon/"+i+".gif");
            }
            
    
            //执行这个函数,参数1  为当前存入图片的数组,参数2为回调函数,执行完getImage函数后调用callbackFun
            getImage(arr,callbackFun);
    
            function getImage(arr,callback){
                //创建图片对象
                var img=new Image();
                //给图片对象添加 arr num imagelist callback的属性,方便后面使用
                img.arr=arr;
                img.num=0;
                img.imageList=[];
                img.callback=callback;
                //给图片添加事件
                img.addEventListener("load",loadHandler);
                //加载当前第1张图片  num=0 就是数组中的1
                img.src=arr[img.num];
            }
    
            //图片加载事件
            function loadHandler(){
                //把img下面的imagelist属性 push的对象
                this.imageList.push(this);
                //num增加
                this.num++;
                if(this.num>5){
                    //这里的callback回调函数,就是我们传递进去需要显示imagelist用的
                    this.callback(this.imageList);
                    return
                }
                //加载下一张图片
                this.src=this.arr[this.num];
            }
    
            function callbackFun(arr){
                console.log(arr);
            }
        </script>
    </body>
    </html>

      图片预加载封装,其实就是把上面的代码 单独写在一个js文件中,通过引用的方式来调用 注意代码中的this

    新建一个Yimage.js文件

    function getImage(arr,callback){
        //创建图片对象
        var img=new Image();
        //给图片对象添加 arr num imagelist callback的属性,方便后面使用
        img.arr=arr;
        img.num=0;
        img.imageList=[];
        img.callback=callback;
        //给图片添加事件
        img.addEventListener("load",this.loadHandler);
        //加载当前第1张图片  num=0 就是数组中的1
        img.src=arr[img.num];
    }
    
    //图片加载事件
    function loadHandler(){
        //把img下面的imagelist属性 push的对象
        this.imageList.push(this);
        //num增加
        this.num++;
        if(this.num>5){
            //这里的callback回调函数,就是我们传递进去需要显示imagelist用的
            this.callback(this.imageList);
            return
        }
        //加载下一张图片
        this.src=this.arr[this.num];
    }

    index主文件中的内容

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <script src="./js/Yimage.js" ></script>
    </head>
    <body>
        
    
        <script>
            var arr=[];
            for(i=1;i<=6;i++){
                arr.push("./image/icon/"+i+".gif");
            }
            
            
            getImage(arr,callbackfun);
            function callbackfun(arr){
                console.log(arr.src);
            }
        </script>
    </body>
    </html>
  • 相关阅读:
    第2天 轻量级RPC框架开发
    028_ajax的String,View,Object执行流程
    027_获取隐藏id值的两种方式
    009_myBatis删除多条记录open="(",写成了index="(".
    026_一次性删除多条数据的sql语句
    025_json请求头与form表单请求头?
    024_如何生成一个32位的uuid?
    023_如何实现一次性删除多条记录?
    022_同步请求与异步请求的区别?
    021_SpringMVC中拦截器的作用?
  • 原文地址:https://www.cnblogs.com/xiaowie/p/13638524.html
Copyright © 2011-2022 走看看