Javascript ResizeObserver被意外触发

Javascript ResizeObserver被意外触发,javascript,html,dom-events,Javascript,Html,Dom Events,为什么ResizeObserver类总是在第一次执行处理程序observe() 尝试在Chrome的开发工具上执行以下代码: (新的ResizeObserver(()=>console.log('ResizeDetected'))。观察($0) 应用日志后,您将立即看到打印的日志,即使您没有进行任何大小更改 我需要只在调整大小时执行处理程序的调整大小观察器。 是否有任何黑客/选项来调整它 let disableObserver=false; const obs=新的调整大小的观察者(()=>{

为什么ResizeObserver类总是在第一次执行处理程序
observe()

尝试在Chrome的开发工具上执行以下代码:

(新的ResizeObserver(()=>console.log('ResizeDetected'))。观察($0)
应用日志后,您将立即看到打印的日志,即使您没有进行任何大小更改

我需要只在调整大小时执行处理程序的调整大小观察器。
是否有任何黑客/选项来调整它

let disableObserver=false;
const obs=新的调整大小的观察者(()=>{
如果(!disableObserver){
log('resizedetected');
}
});
//下面的黑客程序不起作用:
disableObserver=true;
观察(某些元素);
disableObserver=false;

在不同的浏览器中测试,报告的行为是一致的-调用
observer()
时调用observer回调

我查过了,上面写着:

  • 当从DOM中插入/删除被监视的元素时,将触发观察
  • 当监视的元素显示设置为“无”时,观察将触发
  • 未替换的内联元素不触发观察
  • CSS转换不会触发观察
  • 如果正在渲染元素,并且元素的大小不是0,0,则观察将在观察开始时激发
我猜最初的调用是因为元素被呈现

每个元素都可以添加到一个函数中,以跳过初始调用。大概是这样的:

let entriesSeen = new Set(); // set of entries to skip initial resize call

const obs = new ResizeObserver((entries) => {
    for (let entry of entries) {
        if (!entriesSeen.has(entry.target)) {
            // do nothing during initial call
            // just mark element as seen
            entriesSeen.add(entry.target);
        } else {
            console.log('resize detected');
            console.log(entry.target);
        }
    }
});

obs.observe(someElement);

我不知道为什么设计是这样的。从逻辑上讲,ResizeObserver正在做与元素大小相关的任何事情,而不是其他任何事情。当从DOM插入/删除被观察的元素时,观察将触发=>这是MutationObserver的工作,为什么ResizeObserver会做同样的事情?