实践
虚拟代理实现图片预加载
提前准备
- 本地准备一张loading图片作为预加载使用
- 找一个张网图作为要展示的目标图片
- 在控制台把网速调慢一些
效果
- 在目标图片没有加载出来之前会显示loading图片
- 图片加载完成后切换到目标图片
主要代码
//目标图片地址
const targetImageSrc = 'https://w.wallhaven.cc/full/l3/wallhaven-l3zmwy.jpg';
//本地loading
const 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方法
//目标图片src
function 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);