用 IntersectionObserver 替代 scroll 事件实现元素曝光监听
做内容平台或者广告系统时,经常会遇到「元素进入可视区域后上报曝光」的需求。早期实现基本都依赖 scroll 事件配合 getBoundingClientRect 手动计算元素位置,简单直接,但问题也很明显:滚动过程中高频触发的回调会带来大量同步布局计算,页面稍微复杂一点就会掉帧,而且还要自己处理节流、边界判断、滚动容器嵌套这些细节。IntersectionObserver 从 Chrome 51 开始支持,现在各大浏览器都已覆盖,它把「元素与视口交叉状态变化」这件事交给浏览器内部去优化,回调触发频率远低于 scroll,并且天然支持指定 root 容器和阈值。这篇文章会结合一个真实的曝光上报场...