智能助手 

外观
在 DOM 中,观察器(Observer)是用于监听和响应某些变化的对象。以下是几种常见的 DOM 观察器:
MutationObserver
MutationObserver
用于监听 DOM 树的变化,比如节点的添加、删除或属性的变化。
const observer = new MutationObserver((mutationsList, observer) => {
for (let mutation of mutationsList) {
console.log(mutation);
}
});
// 选择要观察的目标节点
const targetNode = document.getElementById('example');
// 配置观察选项
const config = { attributes: true, childList: true, subtree: true };
// 开始观察
observer.observe(targetNode, config);
// 停止观察
// observer.disconnect();
ResizeObserver
ResizeObserver
用于监听元素尺寸的变化,比如宽度和高度的变化。
const resizeObserver = new ResizeObserver((entries) => {
for (let entry of entries) {
console.log('Element resized:', entry.contentRect);
}
});
// 选择要观察的目标元素
const element = document.getElementById('example');
// 开始观察
resizeObserver.observe(element);
// 停止观察
// resizeObserver.unobserve(element);
// 断开观察器
// resizeObserver.disconnect();
IntersectionObserver
IntersectionObserver
用于监听元素与视口(或其他元素)交叉状态的变化,常用于懒加载、无限滚动等场景。
const intersectionObserver = new IntersectionObserver((entries, observer) => {
for (let entry of entries) {
if (entry.isIntersecting) {
console.log('Element is in view:', entry.target);
} else {
console.log('Element is out of view:', entry.target);
}
}
}, {
root: null, // 默认为视口
rootMargin: '0px',
threshold: 0.1 // 10% 可见时触发回调
});
// 选择要观察的目标元素
const targetElement = document.getElementById('example');
// 开始观察
intersectionObserver.observe(targetElement);
// 停止观察
// intersectionObserver.unobserve(targetElement);
// 断开观察器
// intersectionObserver.disconnect();
PerformanceObserver
PerformanceObserver
用于监听性能相关的事件,比如资源加载时间、渲染时间等。
const performanceObserver = new PerformanceObserver((list) => {
const entries = list.getEntries();
entries.forEach((entry) => {
console.log('Performance entry:', entry);
});
});
// 开始观察
performanceObserver.observe({ entryTypes: ['resource', 'mark', 'measure'] });
// 停止观察
// performanceObserver.disconnect();
ReportingObserver
ReportingObserver
用于监听浏览器报告的潜在问题,比如弃用的 API、浏览器错误等。
const reportingObserver = new ReportingObserver((reports, observer) => {
for (let report of reports) {
console.log('Report:', report);
}
}, {
types: ['deprecation', 'intervention'],
buffered: true
});
// 开始观察
reportingObserver.observe();
// 停止观察
// reportingObserver.disconnect();
这些观察器在不同的场景中非常有用,可以帮助开发者更好地监控和响应 DOM 的变化、元素的可见性、性能问题等。根据具体需求选择合适的观察器,以便更高效地管理和优化应用。
版权归属:tuyongtao1