当前位置:首页 > JavaScript

js如何实现懒加载

2026-01-30 16:17:00JavaScript

实现懒加载的方法

使用Intersection Observer API

Intersection Observer API是现代浏览器提供的高效方法,用于监听元素是否进入视口。

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

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

lazyImages.forEach(img => observer.observe(img));

HTML中需要将真实URL放在data-src属性:

js如何实现懒加载

<img data-src="real-image.jpg" alt="Lazy loaded image">

传统滚动事件监听

对于不支持Intersection Observer的旧浏览器,可以使用滚动事件实现。

function lazyLoad() {
  const lazyImages = [].slice.call(document.querySelectorAll('img.lazy'));

  if (lazyImages.length === 0) {
    window.removeEventListener('scroll', lazyLoad);
    return;
  }

  lazyImages.forEach(img => {
    if (img.getBoundingClientRect().top <= window.innerHeight + 100) {
      img.src = img.dataset.src;
      img.classList.remove('lazy');
    }
  });
}

window.addEventListener('scroll', lazyLoad);
document.addEventListener('DOMContentLoaded', lazyLoad);

动态加载组件

对于Vue等现代框架,可以使用动态导入实现组件懒加载。

js如何实现懒加载

const LazyComponent = () => import('./LazyComponent.vue');

在React中可以使用React.lazy:

const LazyComponent = React.lazy(() => import('./LazyComponent'));

图片预加载优化

为了提升用户体验,可以添加加载状态和错误处理。

const img = new Image();
img.src = 'image-to-preload.jpg';
img.onload = () => {
  // 图片加载完成后的处理
};
img.onerror = () => {
  // 加载失败的处理
};

注意事项

  • 合理设置阈值,避免过早或过晚加载
  • 对于重要内容避免懒加载,以免影响SEO
  • 移动端需要考虑网络状况,可以适当提前加载
  • 使用loading="lazy"作为渐进增强方案:
    <img src="image.jpg" loading="lazy" alt="...">

分享给朋友:

相关文章

jquery 加载

jquery 加载

jQuery 加载方法 使用jQuery需要先将其库文件加载到网页中。以下是几种常见的加载方式: 通过CDN加载 推荐使用官方或公共CDN(内容分发网络)加载jQuery,速度快且可能被浏览器缓存:…

加载jquery

加载jquery

加载 jQuery 的方法 通过 CDN 加载 推荐使用官方或公共 CDN(内容分发网络)加载 jQuery,速度快且稳定。将以下代码添加到 HTML 文件的 <head> 或 <b…

vue如何实现递归

vue如何实现递归

递归组件的实现方法 在Vue中实现递归组件通常用于渲染树形结构或嵌套数据。核心思路是组件在其模板中调用自身,但需注意终止条件以避免无限循环。 定义递归组件 组件需设置name选项,才能在模板中调用自…

react如何实现分页

react如何实现分页

实现分页的基本思路 在React中实现分页通常需要以下几个核心步骤:管理当前页码状态、计算分页数据、渲染分页控件。以下是一个典型的分页实现方法。 管理分页状态 使用React的useState钩子来…

vue如何实现录音

vue如何实现录音

使用Web Audio API实现录音 在Vue中实现录音功能可以通过Web Audio API结合MediaRecorder API来完成。以下是一个基础实现方案: 安装必要的依赖: npm i…

js实现图片加载

js实现图片加载

使用Image对象加载图片 通过JavaScript的Image对象可以动态加载图片,适用于需要预加载或动态插入图片的场景。 const img = new Image(); img.src =…