HTML5 词条目录
前端Wiki/词条/IntersectionObserver 懒加载

IntersectionObserver 懒加载

定义异步观察元素与视口的交叉状态,是实现懒加载与懒渲染的标准方案

老的懒加载靠 scroll 事件加 getBoundingClientRect 手动计算,频繁触发布局读取非常耗性能。IntersectionObserver 交给浏览器在合适时机回调:创建观察者时传入阈值(threshold)与根容器,元素进入/离开视口时异步通知,回调里拿 isIntersecting 与 intersectionRatio。

最典型用途是图片懒加载(img 的 data-src 在进入视口时赋给 src)与列表无限滚动。回调触发后 unobserve 取消观察避免重复;配合 rootMargin 可以提前一段距离预加载,过渡更自然。旧版本 IE 不支持但已有广泛 polyfill,新项目可放心使用。

JavaScript
var ob = new IntersectionObserver(function (entries) {
  entries.forEach(function (en) {
    if (en.isIntersecting) {
      var img = en.target;
      img.src = img.getAttribute('data-src');
      img.onload = function () { img.style.opacity = 1; };
      ob.unobserve(img);
    }
  });
}, { rootMargin: '100px' });

// 监听所有带 data-src 的图片
var imgs = document.querySelectorAll('img[data-src]');
imgs.forEach(function (img) { ob.observe(img); });

<!-- 配合这样的 HTML:
<img data-src="https://picsum.photos/320/180" style="opacity: 0; transition: opacity .4s">
-->
⚠ 常见误区
🔗 相关词条简单动画组件
← 返回来源章节组件