Observer

吴龙淼 写于 2022-02-18

Observer

监听非用户直接触发的事件

IntersectionObserver

监听元素从可见到隐藏

可视比例达到某个阈值的时候触发回调
const intersectionObserverMY = new IntersectionObserver(
    function (entries) {
        entries.forEach(item => {
            console.log(item.target, item.intersectionRatio)
        })
    }, {// 当可视区域到达数组位置时,触发事件threshold: [0.5, 1]}
    );

intersectionObserverMY.observe( dom );

mutationObserver

监听对元素的属性的修改、对它的子节点的增删改

const mutationObserver = new MutationObserver((items) => {
    console.log(items)
});

mutationObserver.observe(dom, {
    attributes: true,   //监听属性
    childList: true //监听子节点变化
});

ResizeObserver

监听元素大小变化

const resizeObserver = new ResizeObserver(items => {
    console.log('当前大小', items)
});
resizeObserver.observe(dom);

PerformanceObserver

监听performance对象变化

    const performanceObserver = new PerformanceObserver(items => {
      items.getEntries().forEach(item => {
        console.log(item);
      })
    });
    performanceObserver.observe({entryTypes: ['resource', 'mark', 'measure']});

ReportingObserver

监听过时的 api、浏览器干预等报告等的打印

const reportingObserver = new ReportingObserver((reports, observer) => {
    for (const report of reports) {
        console.log(report.body);
    }
}, {types: ['intervention', 'deprecation']});

reportingObserver.observe();