js图片预加载三种实现方法解析错误,js预加载图片的方法

js图片预加载三种实现方法解析错误,js预加载图片的方法,JS图片预加载三种实现方法解析

本文主要介绍JS图像预加载的三种实现方法的分析,并通过示例代码进行详细介绍。对大家的学习或者工作都有一定的参考价值,有需要的朋友可以参考一下。

预加载的基本概念:页面打开时,图片是预先加载的,由用户缓存在本地,需要时可以直接渲染;浏览图片较多的网页(百度图库、淘宝JD.COM等)可以有更好的用户体验。);

一张图片的预加载

var img=new Image();

img.addEventListener('load ',loadHandler);

img.src='。/img/1 . jpg ';

document . body . appendchild(img);

console . log(img . width);

函数loadHandler(e){

console . log(img . width);//当前图片的原始宽度

}

在上面的代码中,当打印图片的宽度还没有加载时,图片的宽度为0;只有图片加载写入DOM树进行渲染后,才能触发load事件的回调函数打印出图片的宽度;

加载多个图像时,提前在本地缓存。以下是预加载多个图像的三个示例:

第一种:load预加载

加载100张图片,图片名称为1.jpg~100.jpg(下同);

var num=1;

var list=[];

loadImage();

函数loadImage(){

var img=new Image();

img.addEventListener('load ',loadHandler);

img.src='。/img/' num '。jpg ';

}

函数loadHandler(e){

list . push(this . clone node());//复制当前图片元素

num

if(num 100){ console . log(list);返回;}

this.src='。/img/' num '。jpg ';//地址修改继续后触发load事件。

}

上述代码表明:

1.创建一个图片;

2.添加事件侦听负载;到这张图;

3.加载完成后,复制一个新的已加载的图像放入数组中;

4.修改编号;如果num的值大于100,则停止执行并打印数组;

5.给这个图片的地址一个新的地址。因为改变图片的地址会再次触发加载,所以会继续进入loadHandler函数,一直加载,直到加载完成。

第二种:生成器功能实现预加载。

函数loadImage(src){

返回新承诺(功能(解决,拒绝){

设img=new Image();

img.onload=function(){

解决(img);//加载时执行解析函数

}

img.onerror=function(){

Reject(src '这个地址不对');//抛出异常时执行reject函数

}

img.src=src

})

}

函数* fn(){

for(设I=1;i100i ){

产生loadImage('。/img/'我'。jpg’);

}

}

设s=fn();

设value=s.next()。价值;

resume();

功能恢复(){

value.then(img={

console . log(img);//打印加载的图片标签

value=s.next()。价值;

if(值)resume();

});

}

上述代码表明:

1.同时执行生成器函数和loadImage函数;

2.在《无极》中创造一幅画面;

3.判断图片是否可以加载,加载回调函数resolve成功履行承诺;

4.执行一次resume函数,在函数中执行已解决状态的Promise函数。

5.重复s.next()。值,直到加载完所有图片;

第三种:async/await预加载图片

函数loadImage(src){

设p=新承诺(函数(解决,拒绝){

设img=new Image();

Img.onload=function(){//加载时执行解析函数

解决(img);

}

img.onerror=function(){

拒绝(src);

}

img.src=src

})

返回p;

}

异步函数fn(){

设arr=[];

for(设I=3;i80i ){

等待loadImage(`。/img/${i}-.jpg `)。然后(img={

arr . push(img);

});

}

返回arr

}

fn()。然后(list={

console.log(列表);//打印图片数组

})

这个方法是ES6的方法,使用async和await将async转换成阻塞同步。

描述:

1.fn这个函数使用async来表示这个函数是一个异步函数。

2.await可以用在这个函数中。await的功能是将异步变为同步等待,将异步变为阻塞等待。

3.异步完成后,继续向后运行。

4.在异步函数中,Promise对象后面只能跟await。

5.异步函数执行后,它返回一个Promise对象。

以上三种预加载方式仅供参考;

这就是本文的全部内容。希望对大家的学习有帮助,支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: