我试图确定了解一个元素相对于另一个元素的“视觉”位置(而不是 DOM 树位置)的最佳方法是什么。
例如,我有一个元素数组,我有一个 slected 元素,并且想知道哪些元素在视觉上位于所选元素的右侧。
另请注意,元素可以是任何标记类型,并且可以具有任何位置(相对、绝对、固定)和显示(只要它是可见的)。
欢迎任何 jQuery 解决方案。
我试图确定了解一个元素相对于另一个元素的“视觉”位置(而不是 DOM 树位置)的最佳方法是什么。
例如,我有一个元素数组,我有一个 slected 元素,并且想知道哪些元素在视觉上位于所选元素的右侧。
另请注意,元素可以是任何标记类型,并且可以具有任何位置(相对、绝对、固定)和显示(只要它是可见的)。
欢迎任何 jQuery 解决方案。
为什么不简单地使用y轴在哪里element.offsetTop
,x轴在哪里。
根本不需要 jQuery,但如果你坚持可能会这样做。element.offsetLeft
offsetTop
offsetLeft
$(element).offset();
请注意,窗口的左上角是 0-0 点。“卡”在左边的元素会有offsetLeft === 0
,粘在顶部的元素有offsetTop === 0
。仅此而已,真的
回应 zeaklous 的评论:
获取对象的尺寸:
var dimension = {top: {x: element.offsetLeft, y: element.offsetTop},
bottom: {x: element.offsetWidth, y: element.offsetHeight}
};
请注意,offsetWidth
在offsetHeight
DOM 刚刚重绘的某些情况下,已知会返回 0(从刚刚更改的元素中获取这些属性可能会导致这种情况)。
为了避免这种情况,有些人倾向于setTimeout();
在获取他们怀疑可能刚刚被更改的元素的偏移量时使用。
在回应评论时,有人指出您可以简单地使用来避免属性getBoundingClientRect
的任何问题:offsetX
document.getElementById('foo').getBoundingClientRect();
这将返回ClientRect
对象的一个实例,您可以使用它来玩。查看 MDN 了解详情