2

我试图确定了解一个元素相对于另一个元素的“视觉”位置(而不是 DOM 树位置)的最佳方法是什么。

例如,我有一个元素数组,我有一个 slected 元素,并且想知道哪些元素在视觉上位于所选元素的右侧。

另请注意,元素可以是任何标记类型,并且可以具有任何位置(相对、绝对、固定)和显示(只要它是可见的)。

欢迎任何 jQuery 解决方案。

4

1 回答 1

3

为什么不简单地使用y轴在哪里element.offsetTop,x轴在哪里。 根本不需要 jQuery,但如果你坚持可能会这样做。element.offsetLeftoffsetTopoffsetLeft
$(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}
};

请注意,offsetWidthoffsetHeightDOM 刚刚重绘的某些情况下,已知会返回 0(从刚刚更改的元素中获取这些属性可能会导致这种情况)。
为了避免这种情况,有些人倾向于setTimeout();在获取他们怀疑可能刚刚被更改的元素的偏移量时使用。

在回应评论时,有人指出您可以简单地使用来避免属性getBoundingClientRect的任何问题:offsetX

document.getElementById('foo').getBoundingClientRect();

这将返回ClientRect对象的一个​​实例,您可以使用它来玩。查看 MDN 了解详情

于 2013-06-27T20:07:23.023 回答