如何使用jQuery找到元素的绝对位置?

aks*_*hat 390 javascript jquery

有没有办法使用jQuery找到元素的绝对位置,即相对于窗口的开始?

Cre*_*esh 638

.offset() 将元素的偏移位置作为简单对象返回,例如:

var position = $(element).offset(); // position = { left: 42, top: 567 }
Run Code Online (Sandbox Code Playgroud)

您可以使用此返回值将其他元素定位在同一位置:

$(anotherElement).css(position)
Run Code Online (Sandbox Code Playgroud)

  • 我总是忘记这一个,当我谷歌时再次找到你的帖子:p (86认同)
  • 由于边界不同等原因,这似乎并不总是返回绝对位置. (16认同)
  • 我正在使用chrome而`offset()`没有返回正确的顶部坐标.它返回比文档中元素的顶部坐标多大约300个像素.为什么?? (8认同)
  • @Aren我总是忘记这个,每次都发现你的评论很有趣:) (3认同)

Tom*_*ger 190

请注意,它会$(element).offset()告诉您元素相对于文档的位置.这在大多数情况下都很有效,但在这种情况下position:fixed你会得到意想不到的结果.

如果文档比视口长,并且您已垂直向文档底部滚动,则position:fixed元素的offset()将比滚动的数量大于预期值.

如果要查找相对于视口(窗口)的值,而不是位置:固定元素上的文档,则可以scrollTop()从固定元素的offset().top值中减去文档的值.例:$("#el").offset().top - $(document).scrollTop()

如果position:fixed元素的偏移父元素是文档,则需要读取parseInt($.css('top')).

  • 我正是在寻找这个!对于像我这样的菜鸟:要减去的值是`$(document).scrollTop()` (8认同)
  • 真棒!这应该是最好的答案! (3认同)