问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

javascript怎样实现预加载js、css、图片呢?求高手,求demo

发布网友 发布时间:2022-04-07 04:48

我来回答

5个回答

懂视网 时间:2022-04-07 09:09

什么是预加载:

当页面打开图片提前加载,并且缓存在用户本地,需要用到时直接进行渲染;在浏览图片较多的网页(百度图库,淘宝京东等),可以有更好的用户体验;

一张图片的预加载

var img=new Image();
 img.addEventListener("load",loadHandler);
 img.src="./img/1.jpg";
 document.body.appendChild(img);
 console.log(img.width);

 function loadHandler(e){
 console.log(img.width);//当前图片的原始宽度
 }

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

加载多张图片时,要提前在本地进行缓存,下面要讲三种预加载多张图片的例子:

第一种:load预加载

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

var num=1;
 var list=[];
 loadImage();
 function loadImage(){
 var img=new Image();
 img.addEventListener("load",loadHandler);
 img.src="./img/"+num+".jpg";
 }
 function loadHandler(e){
 list.push(this.cloneNode());//复制当前图片元素
 num++;
 if(num>100){console.log(list);return;}
 this.src="./img/"+num+".jpg"; //修改地址继续后触发load事件
 }

上面代码表示:

1、创建一张图片;

2、给这个图片增加事件侦听load;

3、加载完成后,将加载进来的图片复制一个新的,放在数组中;

4、修改num;如果num的值大于100停止执行,并且打印数组;

5、给这个图片的地址赋予一个新地址,因为改变图片的地址就会重新触发load,所以会继续进入loadHandler函数,不断加载,直到加载完成。

第二种:生成器函数实现预加载

function loadImage(src){
 return new Promise(function(resolve,reject){
 let img=new Image();
 img.onload=function(){ 
 resolve(img);//加载时执行resolve函数
 }
 img.onerror=function(){ 
 reject(src+'这个地址错误');//抛出异常时执行reject函数
 }
 img.src=src;
 })
 }
 function* fn(){
 for(let i=1;i<100;i++){
 yield loadImage("./img/"+i+".jpg");
 }
 }
 let s=fn();
 let value=s.next().value; 
 resume();
 function resume(){
 value.then(img=>{
 console.log(img);//打印加载的图片标签
 value=s.next().value;
 if(value)resume();
 });
 }

以上代码表示:

1、执行生成器函数并且一次执行loadImage 函数;

2、在Promise中创建图片;

3、判断图片是否可以加载,加载成功执行Promise的回调函数resolve;

4、执行一次resume函数,并在函数里面执行Promise在resolved状态下的函数

5、反复执行s.next().value,直到全部图片加载完成;

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

function loadImage(src){
 let p=new Promise(function(resolve,reject){
 let img=new Image();
 img.onload=function(){//加载时执行resolve函数
 resolve(img);
 }
 img.onerror=function(){
 reject(src);
 }
 img.src=src;
 })
 return p;
 }
 async function fn(){
 let arr=[];
 for(let i=3;i<80;i++){
 await loadImage(`./img/${i}-.jpg`).then(img=>{
 arr.push(img);
 });
 }
 return arr;
 }
 fn().then(list=>{
 console.log(list);//打印图片数组
 })

这种方法是ES6的方法用到了async和await将异步转换为阻塞式同步;

说明:

1、fn 这个函数使用async 表示这个函数是一个异步函数

2、这个函数中就可以使用await ,await作用就是让异步变为同步等待,异步变成了阻塞式等待

3、当异步全部完成时,再继续向后运行

4、async函数中的await后面只能跟的时Promise对象

5、async函数执行后返回的是一个Promise对象

推荐教程:js入门教程

热心网友 时间:2022-04-07 06:17

预加载一张img,
var tempImg=document.createElement("img");
tempImg.src="...";//url地址
..//
..//
在合适的时候插入到dom中去 或者直接在合适的位置写<img src=".."/>因为已经下载过了,会直接拿缓存,不会重新请求下载

热心网友 时间:2022-04-07 07:35

图片的预加载可以理解,就是创建一个Image对象,在要用的时候才把它加到文档中。至于JS和CSS的预加载,我不是太明白你的目的和用途。如果一定要做这个事情,也是创建Script和Style对象,然后在要用的时候才把它加到文档中。

热心网友 时间:2022-04-07 09:10

现在页面优化都讲究需要的时候再加载,你要预加载?不好理解这种想法....

热心网友 时间:2022-04-07 11:01

为什么要预加载呢,占网速,如果图片太多最好是延迟加载。
javascript图片预加载和延时加载的区别

预加载:就是页面打开,图片什么的都加载好了(优先显示图片)延迟加载:优先显示别的,等别的显示完了,再加载图片(优先显示其他东西)各有所需,看你的用户需要优先看什么。

javascript onLoad函数中canvas 画板上画不了图片 却可以画形状_百度知 ...

Image加载图片是异步运行的,也就是说当你运行到ctx.drawImage(img,0,0,200,200);时,img中的图片还没有实际加载完毕,因此就会出现空白了(这种情况只在Chrome浏览器出现,FireFox中是正常的)。解决的办法就是要预加载图片,最简单的就是加个隐藏的img标签,比如: 专业点的方法则要复杂一些,比如...

图片优化不完全指北

当浏览器开始加载一个页面,它会在主解析器开始加载和解析页面的CSS和JavaScript之前先下载(预加载)任意的图片。这是一个非常有用的技巧,平均下来减少了页面加载时间的20%。但是,这对响应式图片一点帮助都没有,所以需要类似srcset的实现方法。因为你不能先加载好元素后,再用JavaScript检测可视窗口的宽度,如果觉得大小不...

nuxt 如何预加载大图片

方法一:用CSS和JavaScript实现预加载 实现预加载图片有很多方法,包括使用CSS、JavaScript及两者的各种组合。这些技术可根据不同设计场景设计出相应的解决方案,十分高效。将这三个ID选择器应用到(X)html元素中,我们便可通过CSS的background属性将图片预加载到屏幕外的背景上。只要这些图片的路径保持不变,...

网页的图片轮播是怎么实现的

1. 设计轮播结构:使用HTML创建包含图片的轮播结构,可以是一个包含多张图片的容器或者多个带有图片的链接列表。2. 添加样式:通过CSS为轮播图片添加样式,包括大小调整、边框设计以及过渡效果的设置等。同时,可以利用CSS动画属性设置切换动画的时间和效果。3. 实现逻辑控制:使用JavaScript添加轮播逻辑,包括...

预加载是什么意思啊,和下载的区别是什么

WEB预加载就是在网页全部加载之前,对一些主要内容进行加载,以提供给用户更好的体验,减少等待的时间。否则,如果一个页面的内容过于庞大,没有使用预加载技术的页面就会长时间的展现为一片空白,直到所有内容加载完毕。 图片的预加载技术使用较为广泛,一般的效果是网页中的图片由模糊变得清晰。 下载: WEB下载方式分为HTTP...

网站性能优化的实战指南

现代浏览器也实现了懒加载的功能,即为需要实现懒加载的标签增加属性loading="lazy",如:预加载预加载就是通过设置相应的资源属性告诉浏览器是否需要预取,包括CSS文件、JavaScript文件、DNS接下,主要是在HTML页面的间加入:&lt;linkas="script"rel="preload"href="/devpoint/public/scripts/site_min.js"/...

...标签里的图片,加载完了才加载 css 里面的图片 。。

至于想要预加载css中的图片的话,可以用js操作一下,我下面的样例是加载所有的当前页面中style标签中出现的背景图。var cssStr = document.getElementsByTagName('style');for (var i = 0; i &lt; cssStr.length; i++) {var t = cssStr[i].innerHTML.match( /http:.*?[")]/g ) ;for (...

你有用过哪些前端性能优化的方法?

1.减少http请求:在YUI35规则中也有提到,主要是优化js、css和图片资源三个方面,因为html是没有办法避免的。因此,我们可以做一下的几项操作:合并js文件 合并css文件 雪碧图的使用(css sprite)使用base64表示简单的图片 2.减少资源体积 压缩css 压缩js 压缩图片 3.图片加载处理:图片预加载 图片懒...

网站图片太多,怎样按当前浏览页面(屏幕下拉顺序)加载图片?

1、为网站设置一个默认图片,比如用灰色的logo图,把这个图片压缩到足够小。为所有img标签设置这个图为默认图,把实际地址当作一个数据例如data-src存储在img上。2、当用户滚动鼠标滚轴时,判断当前图片是否已经进入了显示区域,进入了就替换掉img的src地址为data-src,开始加载图片。3、这样网站一开始进入...

css调用javascript css javascript cookie和session区别 nginx无法加载js与css 先加载js还是css css和js加载顺序 cssjs资源加载不上 js加载html的文件 nginx前端不加载css
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
海口有到贵阳的汽车? 请问贵阳火车站托运书和衣服到海口怎么一个程序,价格是怎么算了?_百度... 从海口到贵阳的汽车有吗。 贵阳汽车托运到海口多少钱 慈姥竹作品译文 《慈姥竹》的原文是什么?该如何鉴赏呢? 3dtouch是什么意思?? ...人有四种福,两大凶德”,那么这句话的具体意思是什么? 滑动变阻器接法是一上一下,在电路图中怎样判断哪边是接上接线柱哪... 国产吉他牌子排行榜 男人和女人不认识,喝酒了,却说要拿刀捅她,还说两次,是什么意思? 儋州一男子持刀捅伤女友被抓,该名女子的伤势严重吗? 男生把女生推倒压在下面是怎么回事 男子下不了手刀捅“女神”,却砍其无辜室友? 广西一男子捅伤裸体女子后拒捕,他的作案动机是什么? 广西一男子捅伤裸体女子后拒捕,他为何如此暴力? 男子捅伤裸体女子后拒捕被开枪制服,他与被害者是何关系? 2010年农历9月13出生的女孩应该叫啥名字好听,父亲姓杨,名字最好一个字 杨姓女孩名字带开字? 男子当街用刀连捅女子17刀,对方倒地后还踹了两脚:让你惹我,结果怎样? 姓杨想取一个字女孩子姓名,那个字比较好听? 我是女生.为什么下身被男生用手插过之后会痒? 我想一下男性用手模、插女性下体有没有事。 宁波大东南万象科技有限公司怎么样? 黑莓9900手机4G在新加坡多少钱啊?在哪儿可以买到行货?多少新币?急 RRP给水管是无毒管吗? 怎样用手机申请 求血色湘西 (2007)高清百度云资源 酒店rrp是什么意思 衣服吊牌的问题 快手一键剪同款怎么取消 梦到家搬寺庙 给观音下下跪磕头上香 哔卡哔卡的广告都是些什么来的?点击广告会收费吗?(会向点击的人收费吗?),我的好像点了主页和分类的 天龙八部衣服打造图9级哪里买 生日当晚梦见给神仙佛像磕头!梦到一条街都是神仙佛像!我挨个磕头上香!最后玉皇大帝还给我说把香插到 梦见成群结队的蚂蚁集体迁徙是什么意思 梦见一大堆蛇迁徙 梦见许多动物在逃亡,从身上经过 为什么说史上最窝囊的逃亡就是北燕全国大逃亡呢? 历史上大迁徙都有哪些? 中国古代中原地区的几次大规模南迁都是什么时期 一个身份证绑定两个QQ王者荣耀怎么取消一个? 沙丁鱼大逃亡的环境因素 王者荣耀怎么永久注销账号 老梦到自己以前杀了人过了很久后被发现了然后开始逃亡 王者荣耀怎样注销账号? 王者荣耀怎样取消绑定银行卡 长的像苦瓜的水果里面是红色的籽可以吃的叫什么名字? 求助JS批量图片预加载的各种问题 windows7旗舰版 蓝牙连接手机的问题