Intersection Observer 是浏览器提供的一个用于异步监听目标元素与其祖先元素(或视窗 viewport)交叉状态变化的 API,常用于懒加载、元素进入/离开可视区域的检测、统计曝光、实现“无限滚动”等场景。

基本用法

// 1. 创建一个回调函数
function onIntersection(entries, observer) {
  entries.forEach((entry) => {
    if (entry.isIntersecting) {
      console.log("元素进入可视区:", entry.target);
      // 比如加载图片、触发动画、上报曝光…
      observer.unobserve(entry.target); // 如果只需要一次,可以取消监听
    }
  });
}

IntersectionObserverEntry 重要字段

名称 说明
target 被监听的元素
isIntersecting 布尔值,表示是否与根相交
intersectionRatio 相交面积占目标自身面积的比例(0~1)
boundingClientRect / intersectionRect 目标和相交区域的几何信息
time 触发回调时的时间戳
// 2. 实例化 IntersectionObserver
const observer = new IntersectionObserver(onIntersection, {
  root: null,                  // 默认为 null (viewport)
  rootMargin: '0px 0px 0px 0px',
  threshold: 0.25              // 目标至少有 25% 可见时触发
});

// 3. 开始监听:传入一个或多个目标元素
const imgs = document.querySelectorAll('img[data-src]');
imgs.forEach(img => observer.observe(img));

停止观察