Observer

IntersectionObserver

IntersectionObserver 用于异步监听目标元素与祖先元素或视口(viewport)的交叉状态(intersection)变化。常用于实现懒加载图片、无限滚动、广告曝光率统计、动画触发等场景。

基本概念

  • 目标元素(target):你希望观察是否进入/离开视口或其他容器的 DOM 元素。

  • 根元素(root):用于检查交叉的容器,默认是浏览器(即 null)。

  • 交叉比例(intersection ratio):目标元素与根元素相交占目标元素的比例(0 到 1 之间)。

  • 阈值(threshold):指定在什么交叉比例下出发回调。可以是一个数值或数组。

使用方法

const observer = new IntersectionObserver(callback, options);

参数说明:

  • callback(entries, observer):当目标元素的交叉状态发生变化时调用。

    • entries:一个IntersectionObserverEntry对象数组,每个对象描述一个被观察元素的状态。

    • observer:当前的IntersectionObserver实例。

  • options(可选)

    • root:指定根元素(默认为 null, 即视口)。

    • rootMargin:类似 CSS margin,用于扩展或缩小跟元素的有效区域(如:'0px 0px -100px 0px')。

    • threshold: 触发回调的交叉比例阈值(如 0.5 表示当 50% 可见时触发;也可以是 [0, 0.25, 0.5, 0.75, 1])。

IntersectionObserverEntry 主要属性:

应用场景

图片懒加载

触发动画

无限滚动

MutationObserver

监听页面 DOM 结构或属性的变化。监听目标元素及其子树的增删改(节点、属性、文本等)。

应用场景:

  • 动态内容监控(如评论区新增消息)。

  • 防止水印被删除(检测并自动恢复)。

  • 自定义 Web 组件响应内部结构变化。

ResizeObserver

监听元素尺寸变化。当元素的 content box 尺寸发生变化时触发回调(如窗口缩放、内容动态加载、CSS改变等)。

PerformanceObserver

监听性能指标事件。异步收集浏览器性能数据,如资源加载、长任务、首次内容绘制(FCP)、最大内容绘制(LCP)等。

ReportiongObserver

监听浏览器生成的报告(非错误类)。用于捕获浏览器主动发出的“报告”,如废弃 API 使用、CSP 违规、广告拦截干预等。日常业务代码较少使用,多用于 SDK 或监控系统。

最后更新于

这有帮助吗?