当前位置:首页 > 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 实现加载功能的方法 使用 v-if 或 v-show 控制加载状态 在模板中通过 v-if 或 v-show 控制加载动画的显示与隐藏。v-if 会完全移除 DOM 元素,而 v-show 仅…

vue如何实现增删

vue如何实现增删

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

h5如何实现蜡烛点亮

h5如何实现蜡烛点亮

实现蜡烛点亮的H5方法 在H5中实现蜡烛点亮效果,可以通过CSS动画、Canvas绘图或结合JavaScript交互来实现。以下是几种常见的方法: 使用CSS动画和JavaScript 通过CSS定…

vue如何实现高亮

vue如何实现高亮

实现文本高亮的方法 在Vue中实现文本高亮通常可以通过以下几种方式完成: 使用v-html指令结合字符串替换 通过将需要高亮的文本部分替换为HTML标签(如<span class="highl…

java如何实现多继承

java如何实现多继承

在Java中,由于语言设计本身不支持多继承(即一个类不能直接继承多个父类),但可以通过以下方式间接实现类似多继承的效果: 使用接口实现多继承 接口允许一个类实现多个接口,从而继承多个抽象行为。接口中…

vue如何实现confirm

vue如何实现confirm

Vue 实现 Confirm 弹窗的方法 在 Vue 中实现确认弹窗(Confirm)可以通过多种方式,以下是几种常见的方法: 使用浏览器原生 confirm 最简单的实现方式是直接调用浏览器的原生…