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