思路
- 首先让图片的 src 属性引用一张低像素的图片,并配合 css3 中的
filter
属性设置一个模糊效果 - 将需要加载的高清图的地址用自定义的属性(
data-src
)保存下来 - 在图片进入用户视觉前将 src 引用地址替换为
data-src
中的地址,并移除模糊效果
代码
const images = document.querySelector("img[data-src]");
const loadImg = (entries, observer) => {
const [entry] = entries;
if (!entry.isIntersecting) return;
entry.target.src = entry.target.dataset.src;
entry.target.addEventListener("load", () => {
entry.target.classList.remove("filter-img");
});
observer.unobserve(entry.target);
};
const imgObserver = new IntersectionObserver(loadImg, {
root: null,
threshold: 0,
rootMargin: '200px',
});
images.forEach((img) => imgObserver(img));