是否可以使用 MutationObserver 观察 HTML 元素的 offsetTop 属性

Is it possible to observe offsetTop attribute of a HTML element with MutationObserver

在 HTML 页面中,可以出于多种原因重新定位元素 - 元素的样式更改(边距、填充、高度等)、其他元素的插入或删除,或者样式更改其他元素。

我需要确保 jQuery 对话框始终位于锚点旁边,因此如果锚点移动,对话框也会随之移动。但是,我不控制显示对话框的页面(我动态注入一些 JS)。我认为我可以使用 MutationObserver 观察元素(及其所有父元素)的 offsetTop 属性 的变化,但 offsetTop 变化似乎不会引发突变事件。

有人可以确认 offsetTop 更改不会引发突变事件,或者告诉我如何查看偏移顶部吗?

或者,如果有一些其他技术可以确保对话框与其锚点保持一致,我会洗耳恭听 - 但请注意我不控制页面本身,只控制对话框的限制: )

FIDDLE:

在下面的fiddle中,点击"Margin"按钮会修改锚元素的margin-top,导致style属性发生变化,从而触发重新定位。但是,单击其他按钮不会导致重新定位,即使 offsetTop 属性已更改。我需要另外两个按钮来调用 position() 函数。

http://jsfiddle.net/ustmssx7/2/

约束条件

我无法控制 HTML 或 Javascript - 我的 JS 被注入到别人的页面中,所以我能做的非常有限。

回退

我的后备解决方案是每 100 毫秒左右轮询一次 window.anchor.offsetTop,如果它发生变化则重新定位。然而,轮询很糟糕,所以如果我能对事件做出反应,那会好得多。

offsetTop 无法用 MutationObserver 观察到,因为只能观察到 HTML 结构变化。因此任何 HTML 数据在页面的实际 HTML 中可见。

对于您的示例,您真正想要的是观察页面的整个结构,因为任何数量的东西都会影响弹出窗口的位置,并且在对页面进行任何更改时,您都需要重新定位您的弹出窗口。请记住,仍然有一些方法可以在不修改页面 HTML 的情况下修改页面的呈现状态,例如 CSS 动画和悬停效果等。使用这种解决方案无法解决这些问题。