实践
虚拟代理实现图片预加载
提前准备
- 本地准备一张loading图片作为预加载使用
- 找一个张网图作为要展示的目标图片
- 在控制台把网速调慢一些
效果
- 在目标图片没有加载出来之前会显示loading图片
- 图片加载完成后切换到目标图片
主要代码
//目标图片地址const targetImageSrc = 'https://w.wallhaven.cc/full/l3/wallhaven-l3zmwy.jpg';//本地loadingconst loadingSrc = './loading.gif';//要加载的图片function loadImage() { //选择图片加载区域 const imgSection = document.querySelector('section'); const createImage = new Image(); imgSection.appendChild(createImage); return { get setImageSrc() { return 'CANSET'; }, set setImageSrc(val) { createImage.src = val; }, // setImageSrc(src) { // createImage.src = val; // }, };}//代理图片的工具//target 加载源需要有setImageSrc方法//目标图片srcfunction proxyImager(target, src) { //创建负责加载资源的图片 const handImage = new Image(); //监听负责加载资源的图片的load,设置在图片完成时把资源给target handImage.onload = function () { //TODO处理target边界 //1.可以直接通过属性设置,2.可通过函数调用传递src target.setImageSrc = src; }; //开启加载资源 handImage.src = src; //开启本地loading target.setImageSrc = loadingSrc;}//启动代理proxyImager(loadImage(), targetImageSrc);