我想知道是否有一个DOM事件可以监听,它会告诉我DOM元素在页面上移动、重新定位或调整大小。我不是在谈论元素被拖放。一个例子是,如果一个页面上有三个项目的列表,我使用JS从页面上删除前两个列表项目中的一个(或隐藏它或其他),我想附加一个处理程序,当第三个列表项在页面中向上移动时运行。
我使用jQuery,所以简单的JavaScript或jQuery答案是可以接受的。
也许在元素级别没有移动/定位/调整大小事件,所以如果有一个页面/文档级别的事件会告诉我页面被重绘,我可以检查是否需要再次调用函数?
背景
我在一个元素上放置了一个透明的div,同时进行一个Web服务调用来删除该元素。由于我需要绝对定位该覆盖div,我希望它跟踪它最初覆盖的元素。实际上将其锚定到基本元素。
4条答案
按热度按时间m3eecexj1#
我不认为这个解决方案在这么长时间之后会有意义,但是有一个基于here呈现的溢出和下溢事件的优秀的跨浏览器解决方案
为了启用调整大小监听魔法,我们将一个object元素注入到目标元素中,设置一个特殊样式列表以隐藏它,并监视它的大小调整-它充当一个触发器,当目标元素父元素调整大小时提醒我们。
<object>
元素的内容有一个本机resize
事件,就像窗口一样。z2acfund2#
一般来说,你不能得到元素移动/移动的回调;你必须不断地检查间隔轮询器中的维度,这会使它的响应速度有点慢。你可以通过在窗口
resize
事件上调用检查器来改善这一点(如果涉及溢出或固定定位,则使用scroll
。您还可以添加DOM Mutation Event侦听器,以便在元素从文档树,但这并不适用于所有浏览器。你不能用普通的CSS做一个覆盖吗?例如,把
position: relative
放在要隐藏的元素上,然后在里面添加覆盖,如下所示?字符串
g52tjvyc3#
There's a (Ben Alman) plugin for that.TM
这是一个很好的插件,尽管我建议谨慎地使用它(也就是说,不要在太多的元素上使用),以便保持轮询的数量。
7fyelxc54#
我感到惊讶的是,resizeobserver在这个帖子的答案中还没有提到。
ResizeObserver非常有助于检测调整https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver/ResizeObserver大小。
然而,检测移动是另一回事,我没有一个很好的答案。ResizeObserver返回一个带有contentRect的元素,你可能会期望它包含类似getBoundingClientRect的内容,并在页面上显示位置,但它与此不同,实际上是一个可以被弃用的东西https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserverEntry/contentRect