News资讯详情

延迟加载非首屏图片该怎么实现

发布日期:2025-07-07 15:02:05  

在网站建设中,延迟加载非首屏图片是一项重要的优化技术。它可以显著提升网站的性能和用户体验。所谓延迟加载,就是在用户浏览页面时,只加载首屏可见区域的图片,而对于非首屏的图片,等到用户滚动到相应位置时再进行加载。这样可以减少初始页面的加载时间,降低服务器压力,尤其对于图片较多的网站效果更为明显。下面将详细介绍几种实现延迟加载非首屏图片的方法。

延迟加载非首屏图片该怎么实现

原生 JavaScript 实现

使用原生 JavaScript 实现延迟加载非首屏图片,主要是通过监听页面滚动事件,判断图片是否进入可视区域,如果进入则加载图片。

步骤如下:

1. **HTML 结构**:在 HTML 中,将图片的真实地址存储在自定义属性中,如 `data-src`,而 `src` 属性设置为占位图或空。示例代码如下:

<img class="lazyload" data-src="real-image.jpg" src="placeholder.jpg" alt="Image">

2. **JavaScript 代码**:编写 JavaScript 代码来监听滚动事件,并检查图片是否进入可视区域。示例代码如下:

const lazyImages = document.querySelectorAll('.lazyload');

function isInViewport(element) {
    const rect = element.getBoundingClientRect();
    return (
        rect.top >= 0 &&
        rect.left >= 0 &&
        rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
        rect.right <= (window.innerWidth || document.documentElement.clientWidth)
    );
}

function loadImages() {
    lazyImages.forEach((image) => {
        if (isInViewport(image)) {
            image.src = image.dataset.src;
            image.classList.remove('lazyload');
        }
    });
}

window.addEventListener('scroll', loadImages);
window.addEventListener('resize', loadImages);
window.addEventListener('load', loadImages);

使用 Intersection Observer API

Intersection Observer API 是一种更现代、更高效的方法来实现图片的延迟加载。它可以异步观察目标元素与祖先元素或顶级文档视口的交叉状态。

步骤如下:

1. **HTML 结构**:同样将图片的真实地址存储在 `data-src` 属性中,`src` 属性设置为占位图或空。

2. **JavaScript 代码**:使用 Intersection Observer API 来监听图片是否进入可视区域。示例代码如下:

const lazyImages = document.querySelectorAll('.lazyload');

const observer = new IntersectionObserver((entries, observer) => {
    entries.forEach((entry) => {
        if (entry.isIntersecting) {
            const img = entry.target;
            img.src = img.dataset.src;
            img.classList.remove('lazyload');
            observer.unobserve(img);
        }
    });
});

lazyImages.forEach((image) => {
    observer.observe(image);
});

使用第三方库

除了自己实现,还可以使用一些成熟的第三方库来实现图片的延迟加载,如 LazyLoad 库。

步骤如下:

1. **引入库**:在 HTML 中引入 LazyLoad 库。可以通过 CDN 或 npm 安装。示例代码如下:

<script src="https://cdnjs.cloudflare.com/ajax/libs/lazyload/2.0.0/lazyload.min.js"></script>

2. **HTML 结构**:将图片的真实地址存储在 `data-src` 属性中,`src` 属性设置为占位图或空。

3. **初始化库**:在 JavaScript 中初始化 LazyLoad 库。示例代码如下:

const lazyLoadInstance = new LazyLoad({
    elements_selector: '.lazyload'
});

相关问答

1. **延迟加载非首屏图片有什么好处?**

延迟加载非首屏图片可以减少初始页面的加载时间,因为只加载首屏可见区域的图片,降低了服务器的压力。同时,它还可以节省用户的流量,尤其是在移动设备上。此外,更快的页面加载速度可以提升用户体验,减少用户的流失率。

2. **使用第三方库和自己实现有什么区别?**

使用第三方库的优点是代码简单,开发效率高,并且这些库经过了大量的测试和优化,稳定性较好。而自己实现则可以根据具体需求进行定制,对代码有更深入的理解和控制,但需要花费更多的时间和精力来开发和维护。