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 或监控系统。
最后更新于
这有帮助吗?