JavaScript实现懒加载的两种主流方案与四步法详解

作者:函数茶馆时间:2026-10-31 07:29:44浏览:443

本文详细介绍JavaScript中实现图片懒加载的两种核心方式:基于Intersection Observer API的现代方案与基于传统滚动事件的兼容方案。重点解析懒加载的四步实现流程,包括占位图设置、滚动监听、可视区域判断及资源替换,并探讨防抖节流等优化策略以提升页面性能。

什么是懒加载

懒加载(Lazy Loading)是一种资源延迟加载的优化技术,旨在将资源的加载时机推迟至其真正被用户需要时。该技术能有效提升应用或网站的运行性能,并显著缩短初始页面的加载时间。

实现懒加载的方式

目前实现懒加载主要采用两种技术路径:一是基于Intersection Observer API的现代异步监听方案,二是基于传统滚动事件监听的传统方案。其中,Intersection Observer API作为浏览器提供的新型接口,能够异步检测目标元素与祖先元素或视口之间的交集状态,是实现懒加载的高效手段。

下面是一种实现懒加载的常见方式(Intersection Observer API):

首先,在HTML结构中为需要延迟加载的资源(如图片或视频)添加标记,通常通过data属性或特定的class名称进行标识。

示例:

<img class="lazy" data-src="image.jpg" alt="Lazy-loaded Image">

其次,利用JavaScript监听页面滚动或其他触发行为,实时检测目标元素是否已进入用户的可视区域。

使用Intersection Observer API:

// 观察器选项
const options = {
  root: null, // 默认为视窗
  rootMargin: '0px',
  threshold: 0.5 // 当目标元素50%可见时触发加载
};
const handleIntersection = (entries,) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
 // 加载目标元素
      const target = entry.target;
      target.src = target.dataset.src;
      observer.unobserve(target);
    }
  });
};
// 创建一个观察器实例
const observer = new IntersectionObserver(handleIntersection, options);
// 找到所有需要懒加载的元素并进行观察
const lazyElements = document.querySelectorAll('.lazy');
lazyElements.forEach(element => {
  observer.observe(element);
});

通过配置Intersection Observer API来监控目标元素的状态。当元素进入可视区域时,将data-src属性中存储的资源地址赋值给src属性,从而触发资源的实际加载。观察器的具体选项可根据实际需求进行灵活调整。

或者说,你也可以根据一定的步骤去实现

js四步法

设置占位图

在HTML代码中,将待懒加载图片的src属性初始设置为一个占位图。该占位图通常是小尺寸、模糊处理或单色的图像,用于在资源加载前提供视觉反馈。

<img src="placeholder.jpg" data-src="image-to-lazy-load.jpg" alt="Lazy-loaded Image">

监听滚动事件

利用JavaScript代码监听页面的滚动行为。当滚动事件发生时,程序需判断当前的懒加载图片是否已经移动至可视区域内。

window.addEventListener('scroll', function() {
  // 判断懒加载图片是否进入可视区域
  // 如果图片进入可视区域,则触发加载图片的函数
});

加载图片

一旦确认懒加载图片已进入可视区域,程序会将占位图对应的data-src属性值赋给src属性,进而触发图片的真实加载过程。

function lazyLoad() {
  const lazyImages = document.querySelectorAll('img[data-src]');
  lazyImages.forEach(function(img) {
    if (isInViewport(img)) {
      img.src = img.dataset.src;
      img.removeAttribute('data-src');
    }
  });
}
function isInViewport(element) {
  var rect = element.getBoundingClientRect();
  return (
    rect.bottom >= 0 &&
    rect.right >= 0 &&
    rect.top <= (window.innerHeight || document.documentElement.clientHeight) &&
    rect.left <= (window.innerWidth || document.documentElement.clientWidth)
  );
}

触发加载函数

在滚动事件的处理逻辑中调用上述加载函数,以此实现完整的懒加载交互效果。

window.addEventListener('scroll', function() {
  lazyLoad();
});

尽管上述方法可行,但在实际工程应用中,需根据具体场景进行适当调整与优化。例如,建议引入防抖(debounce)和节流(throttle)机制以避免频繁触发,并妥善处理图片加载失败等异常状况。此外,直接使用成熟的第三方懒加载库也是简化代码并扩展功能的可行途径。

到此这篇关于JavaScript的懒加载处理的文章就介绍到这了,更多相关js 懒加载内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

作者最新文章