电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

JS圖片預(yù)加載三種實現(xiàn)方法解析

瀏覽:90日期:2024-05-09 15:36:10

預(yù)加載基本概念:當(dāng)頁面打開圖片提前加載,并且緩存在用戶本地,需要用到時直接進(jìn)行渲染;在瀏覽圖片較多的網(wǎng)頁(百度圖庫,淘寶京東等),可以有更好的用戶體驗;

一張圖片的預(yù)加載

var img=new Image(); img.addEventListener('load',loadHandler); img.src='http://www.hdgsjgj.cn/bcjs/img/1.jpg'; document.body.appendChild(img); console.log(img.width); function loadHandler(e){ console.log(img.width);//當(dāng)前圖片的原始寬度 }

上面代碼中,圖片還沒加載完成打印圖片的寬度時,圖片寬度為0;只有等圖片加載完成后并寫入DOM樹渲染后,才去觸發(fā)load事件的回調(diào)函數(shù),才能打印出圖片的寬度;

加載多張圖片時,要提前在本地進(jìn)行緩存,下面要講三種預(yù)加載多張圖片的例子:

第一種:load預(yù)加載

加載100張圖片,且圖片名為1.jpg~100.jpg(下同);

var num=1; var list=[]; loadImage(); function loadImage(){ var img=new Image(); img.addEventListener('load',loadHandler); img.src='http://www.hdgsjgj.cn/bcjs/img/'+num+'.jpg'; } function loadHandler(e){ list.push(this.cloneNode());//復(fù)制當(dāng)前圖片元素 num++; if(num>100){console.log(list);return;} this.src='http://www.hdgsjgj.cn/bcjs/img/'+num+'.jpg'; //修改地址繼續(xù)后觸發(fā)load事件 }

上面代碼表示:

1、創(chuàng)建一張圖片;

2、給這個圖片增加事件偵聽load;

3、加載完成后,將加載進(jìn)來的圖片復(fù)制一個新的,放在數(shù)組中;

4、修改num;如果num的值大于100停止執(zhí)行,并且打印數(shù)組;

5、給這個圖片的地址賦予一個新地址,因為改變圖片的地址就會重新觸發(fā)load,所以會繼續(xù)進(jìn)入loadHandler函數(shù),不斷加載,直到加載完成。

第二種:生成器函數(shù)實現(xiàn)預(yù)加載

function loadImage(src){ return new Promise(function(resolve,reject){ let img=new Image(); img.onload=function(){ resolve(img);//加載時執(zhí)行resolve函數(shù) } img.onerror=function(){ reject(src+’這個地址錯誤’);//拋出異常時執(zhí)行reject函數(shù) } 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);//打印加載的圖片標(biāo)簽 value=s.next().value; if(value)resume(); }); }

以上代碼表示:

1、執(zhí)行生成器函數(shù)并且一次執(zhí)行l(wèi)oadImage 函數(shù);

2、在Promise中創(chuàng)建圖片;

3、判斷圖片是否可以加載,加載成功執(zhí)行Promise的回調(diào)函數(shù)resolve;

4、執(zhí)行一次resume函數(shù),并在函數(shù)里面執(zhí)行Promise在resolved狀態(tài)下的函數(shù)

5、反復(fù)執(zhí)行s.next().value,直到全部圖片加載完成;

第三種:async/await預(yù)加載圖片

function loadImage(src){ let p=new Promise(function(resolve,reject){ let img=new Image(); img.onload=function(){//加載時執(zhí)行resolve函數(shù)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);//打印圖片數(shù)組 })

這種方法是ES6的方法用到了async和await將異步轉(zhuǎn)換為阻塞式同步;

說明:

1、fn 這個函數(shù)使用async 表示這個函數(shù)是一個異步函數(shù)

2、這個函數(shù)中就可以使用await ,await作用就是讓異步變?yōu)橥降却惒阶兂闪俗枞降却?/p>

3、當(dāng)異步全部完成時,再繼續(xù)向后運(yùn)行

4、async函數(shù)中的await后面只能跟的時Promise對象

5、async函數(shù)執(zhí)行后返回的是一個Promise對象

以上就是三種預(yù)加載的方法,僅供參考;

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 智能垃圾箱|垃圾房|垃圾分类亭|垃圾分类箱专业生产厂家定做-宿迁市传宇环保设备有限公司 | 酒瓶_酒杯_玻璃瓶生产厂家_徐州明政玻璃制品有限公司 | 卓能JOINTLEAN端子连接器厂家-专业提供PCB接线端子|轨道式端子|重载连接器|欧式连接器等电气连接产品和服务 | 冰雕-冰雪世界-大型冰雕展制作公司-赛北冰雕官网 | 上海公司注册-代理记账-招投标审计-上海昆仑扇财税咨询有限公司 上海冠顶工业设备有限公司-隧道炉,烘箱,UV固化机,涂装设备,高温炉,工业机器人生产厂家 | 电动高压冲洗车_价格-江苏速利达机车有限公司 | 机房监控|动环监控|动力环境监控系统方案产品定制厂家 - 迈世OMARA | 液压升降平台_剪叉式液压/导轨式升降机_传菜机定做「宁波日腾升降机厂家」 | 钢格板|镀锌钢格板|热镀锌钢格板|格栅板|钢格板|钢格栅板|热浸锌钢格板|平台钢格板|镀锌钢格栅板|热镀锌钢格栅板|平台钢格栅板|不锈钢钢格栅板 - 专业钢格板厂家 | 抖音短视频运营_企业网站建设_网络推广_全网自媒体营销-东莞市凌天信息科技有限公司 | KBX-220倾斜开关|KBW-220P/L跑偏开关|拉绳开关|DHJY-I隔爆打滑开关|溜槽堵塞开关|欠速开关|声光报警器-山东卓信有限公司 | 塑料撕碎机_编织袋撕碎机_废纸撕碎机_生活垃圾撕碎机_废铁破碎机_河南鑫世昌机械制造有限公司 | 油缸定制-液压油缸厂家-无锡大鸿液压气动成套有限公司 | 智慧水务|智慧供排水利信息化|水厂软硬件系统-上海敢创 | 上海三信|ph计|酸度计|电导率仪-艾科仪器| ALC墙板_ALC轻质隔墙板_隔音防火墙板_轻质隔墙材料-湖北博悦佳 | 网架支座@球铰支座@钢结构支座@成品支座厂家@万向滑动支座_桥兴工程橡胶有限公司 | 隧道风机_DWEX边墙风机_SDS射流风机-绍兴市上虞科瑞风机有限公司 | 井式炉-台车式回火炉-丹阳市电炉厂有限公司 | 自恢复保险丝_贴片保险丝_力特保险丝_Littelfuse_可恢复保险丝供应商-秦晋电子 | 球磨机,节能球磨机价格,水泥球磨机厂家,粉煤灰球磨机-吉宏机械制造有限公司 | 车辆定位管理系统_汽车GPS系统_车载北斗系统 - 朗致物联 | 台式恒温摇床价格_大容量恒温摇床厂家-上海量壹科学仪器有限公司 | 常州翔天实验仪器厂-恒温振荡器-台式恒温振荡器-微量血液离心机 恒温恒湿箱(药品/保健品/食品/半导体/细菌)-兰贝石(北京)科技有限公司 | 电机修理_二手电机专家-河北豫通机电设备有限公司(原石家庄冀华高压电机维修中心) | 除湿机|工业除湿机|抽湿器|大型地下室车间仓库吊顶防爆除湿机|抽湿烘干房|新风除湿机|调温/降温除湿机|恒温恒湿机|加湿机-杭州川田电器有限公司 | SMN-1/SMN-A ABB抽屉开关柜触头夹紧力检测仪-SMN-B/SMN-C-上海徐吉 | 拖鞋定制厂家-品牌拖鞋代加工厂-振扬实业中国高端拖鞋大型制造商 | 欧洲MV日韩MV国产_人妻无码一区二区三区免费_少妇被 到高潮喷出白浆av_精品少妇自慰到喷水AV网站 | 空冷器|空气冷却器|空水冷却器-无锡赛迪森机械有限公司[官网] | 海南在线 海南一家| 全自动真空上料机_粉末真空上料机_气动真空上料机-南京奥威环保科技设备有限公司 | 奥运星-汽车性能网评-提供个性化汽车资讯 | 武汉刮刮奖_刮刮卡印刷厂_为企业提供门票印刷_武汉合格证印刷_现金劵代金券印刷制作 - 武汉泽雅印刷有限公司 | 糖衣机,除尘式糖衣机,全自动糖衣机,泰州市长江制药机械有限公司 体感VRAR全息沉浸式3D投影多媒体展厅展会游戏互动-万展互动 | 齿轮减速机电机一体机_齿轮减速箱加电机一体化-德国BOSERL蜗轮蜗杆减速机电机生产厂家 | 巨野电机维修-水泵维修-巨野县飞宇机电维修有限公司 | 东莞市踏板石餐饮管理有限公司_正宗桂林米粉_正宗桂林米粉加盟_桂林米粉加盟费-东莞市棒子桂林米粉 | 【德信自动化】点胶机_全自动点胶机_自动点胶机厂家_塑料热压机_自动螺丝机-深圳市德信自动化设备有限公司 | 欧美日韩国产一区二区三区不_久久久久国产精品无码不卡_亚洲欧洲美洲无码精品AV_精品一区美女视频_日韩黄色性爱一级视频_日本五十路人妻斩_国产99视频免费精品是看4_亚洲中文字幕无码一二三四区_国产小萍萍挤奶喷奶水_亚洲另类精品无码在线一区 | 橡胶电子拉力机-塑料-微电脑电子拉力试验机厂家-江苏天源 |