监听DOM元素何时被移动
Listening for when a DOM element is moved
我要做的基本上相当于这个CSS:
position: absolute;
top: calc(100px * nth-child);
考虑到这不是有效的CSS(为第n个子获取n的值并将其乘以另一个值),我必须使用JavaScript完成此操作。我可以在页面加载时轻松做到这一点。我想做的是监听元素何时被移动或重新排序,以便它可以重新计算其位置。
无论它是在当前的parentNode中移动,还是完全移动到不同的parentNode中,都需要工作。
有人知道怎么做吗?或者,是否有一种方法可以用我不知道的纯CSS来做到这一点?
只是回答了我自己的问题。因为我已经计划使用Web组件,事实证明,attachedCallback
做的正是我正在寻找的。
最后,我已经找出了createdCallback
和attachedCallback
之间的实际用例差异。
假设你有:
<div>
<my-element id="a"></my-element>
<my-element id="b"></my-element>
</div>
然后输入:
var a = document.getElementById("a");
a.parentNode.appendChild(a);
这将把#a
移动到末尾,产生如下:
<div>
<my-element id="b"></my-element>
<my-element id="a"></my-element>
</div>
关键是,当appendChild
被调用时(我假设,insertBefore
,以及所有其他移动节点的函数),my-element
将首先触发它的detachedCallback
,然后是attachedCallback
。因此,如果确定其位置的代码包含在attachedCallback
:
myElementPrototype.attachedCallback = function() {
var myPosition = [].slice.call(this.parentNode.children).indexOf(this);
}
则无论元素移动到哪里,它都会再次被确定。这应该与Virtual DOM api(如React等)兼容。
至于如何做到这一点没有Web组件,那么我想答案是做任何文档注册元素做填充attachedCallback
和detachedCallback
。快速浏览一下,它看起来像是mutationobserver的东西,而且相当复杂。
相关文章:
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 正在SharePoint 2013母版页中添加JQuery移动文件
- 如何在android中使用phonegap将文件从一个文件夹移动/复制到另一个文件夹
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- FabricJs-限制主对象内添加对象的移动区域
- 如何从画布上的某个移动事件中获取X和Y
- 触摸移动时切换到新元素
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 停止jQuery UI滑块移动超过给定值
- 谷歌地图API v3不适用于移动浏览器或PhoneGap
- 如何检测多点触摸手指何时移动到子元素上
- 如何检测 jquery 移动输入滑块何时在 jquery 上移动
- 移动 Safari 垂直滚动 - 如何在 Javascript 中检测窗口何时停止移动
- 如果没有jquery,我需要确定鼠标是否在一个元素上,而不是确定它何时结束(以防它没有移动来触发onmouseover)
- 我如何检测地图何时被移动
- 如何自定义jquery移动对话框何时显示
- 监听DOM元素何时被移动
- 检测移动Safari何时因为第二个视频开始而停止播放视频
- 如何检测鼠标移动何时停止
- 在显示谷歌地图圆形对象之前,告知该对象何时移动