JavaScript 图片按需加载是一种优化网页性能的技术,它允许页面上的图片在用户滚动到它们的位置时才加载,而不是一次性加载所有图片。这样可以减少初始页面加载时间,提高用户体验。
图片按需加载通常通过以下几种方式实现:
以下是一个简单的懒加载实现示例:
<img class="lazy" data-src="image1.jpg" alt="Image 1">
<img class="lazy" data-src="image2.jpg" alt="Image 2">
<!-- 更多图片 -->
.lazy {
opacity: 0;
transition: opacity 0.3s;
}
.lazy.loaded {
opacity: 1;
}
document.addEventListener("DOMContentLoaded", function() {
const lazyImages = [].slice.call(document.querySelectorAll("img.lazy"));
if ("IntersectionObserver" in window) {
let lazyImageObserver = new IntersectionObserver(function(entries, observer) {
entries.forEach(function(entry) {
if (entry.isIntersecting) {
let lazyImage = entry.target;
lazyImage.src = lazyImage.dataset.src;
lazyImage.classList.add("loaded");
lazyImageObserver.unobserve(lazyImage);
}
});
});
lazyImages.forEach(function(lazyImage) {
lazyImageObserver.observe(lazyImage);
});
} else {
// 如果浏览器不支持 IntersectionObserver,可以使用传统的滚动事件监听
function lazyLoad() {
lazyImages.forEach(function(lazyImage) {
if (lazyImage.getBoundingClientRect().top <= window.innerHeight && lazyImage.getBoundingClientRect().bottom >= 0 && getComputedStyle(lazyImage).display !== "none") {
lazyImage.src = lazyImage.dataset.src;
lazyImage.classList.add("loaded");
lazyImages = lazyImages.filter(function(image) {
return image !== lazyImage;
});
if (lazyImages.length === 0) {
document.removeEventListener("scroll", lazyLoad);
window.removeEventListener("resize", lazyLoad);
window.removeEventListener("orientationChange", lazyLoad);
}
}
});
}
document.addEventListener("scroll", lazyLoad);
window.addEventListener("resize", lazyLoad);
window.addEventListener("orientationChange", lazyLoad);
lazyLoad();
}
});
问题1:图片加载顺序错误
IntersectionObserver
可以更精确地控制加载时机,减少顺序错乱的可能性。问题2:兼容性问题
IntersectionObserver
。问题3:性能问题
通过上述方法,可以有效地实现图片按需加载,并解决常见的实现问题。
领取专属 10元无门槛券
手把手带您无忧上云