JavaScript 语言 前端性能优化之图片懒加载实现 Intersection Observer与滚动监听

JavaScript阿木 发布于 2025-06-25 13 次阅读


JavaScript 前端性能优化:图片懒加载实现——Intersection Observer与滚动监听

在当前的网络环境下,前端性能优化已经成为开发者关注的焦点之一。其中,图片懒加载作为一种常见的优化手段,可以有效减少初次加载时的数据量,提高页面加载速度,提升用户体验。本文将围绕JavaScript语言,探讨如何使用Intersection Observer API和滚动监听来实现图片懒加载。

图片懒加载是一种按需加载图片的技术,它可以在用户滚动到页面底部或即将进入视口时才开始加载图片。这种技术可以显著减少页面加载时间,提高页面性能。

Intersection Observer API

Intersection Observer API 是一个用于异步观察目标元素与其祖先元素或顶级文档视口(viewport)交叉状态变化的API。它允许开发者在不影响页面性能的情况下,监听元素是否进入视口。

使用Intersection Observer API实现图片懒加载

以下是一个使用Intersection Observer API实现图片懒加载的示例代码:

javascript

// 获取所有需要懒加载的图片元素


const images = document.querySelectorAll('img[data-src]');

// 创建Intersection Observer实例


const observer = new IntersectionObserver((entries, observer) => {


entries.forEach(entry => {


if (entry.isIntersecting) {


// 如果图片进入视口,则加载图片


const img = entry.target;


img.src = img.dataset.src;


// 加载完成后移除Intersection Observer监听


observer.unobserve(img);


}


});


}, {


rootMargin: '0px',


threshold: 0.1


});

// 开始监听所有图片元素


images.forEach(img => {


observer.observe(img);


});


在上面的代码中,我们首先获取所有需要懒加载的图片元素,然后创建一个Intersection Observer实例。在回调函数中,我们检查每个图片元素是否进入视口,如果进入,则将`data-src`属性中的图片地址赋值给`src`属性,从而开始加载图片。加载完成后,我们移除Intersection Observer对当前图片的监听。

滚动监听

除了使用Intersection Observer API,我们还可以通过监听滚动事件来实现图片懒加载。

使用滚动监听实现图片懒加载

以下是一个使用滚动监听实现图片懒加载的示例代码:

javascript

// 获取所有需要懒加载的图片元素


const images = document.querySelectorAll('img[data-src]');

// 获取视口高度


const viewportHeight = window.innerHeight;

// 滚动事件监听函数


const handleScroll = () => {


images.forEach(img => {


const imgTop = img.getBoundingClientRect().top;


const imgBottom = img.getBoundingClientRect().bottom;

// 如果图片即将进入视口或已经进入视口,则加载图片


if (imgTop < viewportHeight && imgBottom > 0) {


img.src = img.dataset.src;


}


});


};

// 监听滚动事件


window.addEventListener('scroll', handleScroll);

// 初始化时加载进入视口的图片


handleScroll();


在上面的代码中,我们首先获取所有需要懒加载的图片元素和视口高度。然后定义一个滚动事件监听函数`handleScroll`,在函数中遍历所有图片元素,检查每个图片元素是否即将进入视口或已经进入视口。如果条件满足,则将`data-src`属性中的图片地址赋值给`src`属性,从而开始加载图片。我们监听滚动事件,并在初始化时调用`handleScroll`函数加载进入视口的图片。

总结

本文介绍了两种实现图片懒加载的方法:Intersection Observer API和滚动监听。Intersection Observer API可以提供更精确的元素进入视口检测,而滚动监听则更加简单易用。开发者可以根据实际需求选择合适的方法来实现图片懒加载,从而提高页面性能,提升用户体验。