当前位置:首页 > JavaScript

js如何实现懒加载

2026-04-04 07:57:51JavaScript

实现懒加载的方法

使用Intersection Observer API

Intersection Observer API是现代浏览器提供的原生API,用于检测目标元素与视口的交叉状态。通过监听目标元素的可见性变化,可以实现懒加载。

js如何实现懒加载

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

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

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

使用滚动事件监听

传统方法通过监听滚动事件,计算元素是否进入视口。虽然兼容性较好,但性能较差,需要手动优化。

js如何实现懒加载

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

  lazyImages.forEach(img => {
    if (isInViewport(img)) {
      img.src = img.dataset.src;
    }
  });
}

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

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

使用loading属性

HTML5新增的loading属性可直接实现原生懒加载,但需注意浏览器兼容性。

<img src="image.jpg" loading="lazy" alt="Lazy-loaded image">

使用第三方库

常见懒加载库如lozad.js、lazysizes等,简化实现过程并提供额外功能。

// 使用lozad.js
const observer = lozad('.lozad', {
  loaded: function(el) {
    el.classList.add('loaded');
  }
});
observer.observe();

注意事项

  • 确保设置合理的阈值(threshold)避免过早触发加载
  • 对动态添加的内容需重新绑定观察器
  • 移动端需考虑设备像素比(DPR)适配高清图
  • 提供适当的占位符避免布局抖动

分享给朋友:

相关文章

vue如何实现增删

vue如何实现增删

使用 Vue 实现增删功能 在 Vue 中实现增删功能通常涉及数据绑定、事件处理和列表渲染。以下是具体实现方法: 数据定义与初始化 在 Vue 组件的 data 选项中定义数组来存储需要操作的数据项…

vue如何实现mvvm

vue如何实现mvvm

Vue 的 MVVM 实现原理 Vue 通过数据绑定和响应式系统实现 MVVM(Model-View-ViewModel)模式。其核心在于将数据模型(Model)与视图(View)通过 ViewMod…

如何实现java序列化

如何实现java序列化

实现Java序列化的方法 1. 实现Serializable接口 要使一个类可序列化,需要让该类实现java.io.Serializable接口。这是一个标记接口,没有任何方法需要实现。 publi…

java如何实现跨平台

java如何实现跨平台

Java实现跨平台的原理 Java通过“一次编写,到处运行”的设计理念实现跨平台能力。其核心机制包括: Java虚拟机(JVM) Java源代码编译为字节码(.class文件),由JVM解释执行。不…

vue如何实现轮询

vue如何实现轮询

实现轮询的方法 在Vue中实现轮询可以通过以下几种方式完成,具体选择取决于项目需求和场景。 使用 setInterval 通过 setInterval 定时调用接口或执行任务,适合简单的轮询场景。…

vue如何实现图

vue如何实现图

Vue 实现图表的方法 Vue 中实现图表可以通过多种方式,常见的有使用第三方库或自定义实现。以下是几种常见的方法: 使用 ECharts ECharts 是一个功能强大的图表库,支持多种图表类型。…