【问题标题】:Watching the offset of an element in the dom, when a different element changes?观察 dom 中元素的偏移量,当不同的元素发生变化时?
【发布时间】:2012-11-19 21:31:21
【问题描述】:

我正在尝试找到一种方法来监视/观察 DOM 元素上的偏移量/宽度/高度以捕捉任何变化。但是,如果另一个元素移动了被监视的元素或调整了它的大小,我还需要捕捉对元素的任何更改。例如。被监视对象上方的 DOM 元素增长,并占用更多空间,导致被监视元素偏移量移动。

Example to demonstrate what I need to watch/monitor

我已经使用计时器实现了它,但是回调/观察器会好很多。

我已经找到了几种方法来观察特定元素的变化,但这需要监控整个 DOM 的变化,这并不理想。

显示如何监视/观察特定项目更改的解决方案将无济于事,因为它们依赖于该特定项目的属性/CSS 更改。 不起作用的示例: jQuery CSS Property Monitoring Another watch tool

我认为 MutationObserver 可能会起作用,但我还没有让它起作用。

如果有人有想法,请赐教!

2013 年 10 月 14 日更新:请参阅我自己的答案以获得解决方案。

【问题讨论】:

  • 到目前为止,您对MutationObserver 进行了哪些尝试,因为这应该在属性更改时触发。它可能无法让您完全到达那里,但它可能会有所帮助 - 除非它不会触发样式更改。我自己并没有真正检查过。
  • 好的,刚刚检查过,MutationObservers 会触发样式属性更改(至少在 FireFox 中).. 但它不会告诉您更改了哪个属性。还是有用的。但是,如果其他元素(或窗口)改变尺寸,这将无助于做出反应。为此,您肯定需要一个间隔/超时检查器和一个窗口调整大小事件侦听器......除非有人知道允许您连接到用户代理渲染过程的 js 方法?
  • 我遇到的问题完全相同。很容易捕获可能影响另一个项目的偏移量的内联样式更改,但是如果 dom 中的类更改会更改要观看的项目的偏移量,MutationObserver 只会告诉一个类已添加。我想我会添加一个突变观察者来捕捉任何变化,然后做一个手册if offset.top != old_offset.top。至少比使用计时器要好。

标签: javascript jquery html dom


【解决方案1】:

我必须建立自己的图书馆,但忘了用图书馆回答这个问题。

来源github.com/leifcr/jquery-csswatch 以及此处的示例:leifcr.github.io/jquery-csswatch/examples/

【讨论】:

  • 这非常有用,正是我所需要的。赞一个!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-29
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 2019-09-11
相关资源
最近更新 更多