图片预加载
第一种方法,异步回调,执行完这个函数,在回调<!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>

浙公网安备 33010602011771号