假设我有$container
div position: relative
,$foo
内有div position: absolute
。我想得到$foo
相对于容器的位置。 jQuery使这很简单:
$foo.position()
返回具有top
和left
属性的对象,以像素为单位指定。问题是,如果容器向下或向右滚动,则此数字不再准确。具体来说,它不会发生变化。 jQuery计算position()
使其等同于$foo.offset() - $container.offset()
(其中offset()
给出窗口相对位置),并且$foo.offset()
随着用户滚动$container
而更改。
答案 0 :(得分:1)
您似乎需要$foo.position()
,然后通过添加$container
的{{1}}和scrollTop()
进行调整。
如果您实际上不知道scrollLeft()
的相对容器是什么,这会很烦人。我已经开始编写一个函数(在CoffeeScript中):
$foo
我有一种更直接的方式吗?或者直接查找任意元素容器的滚动条位置?
[更新>在阅读了Gaby的回答和评论后,我制作了一个小jQuery插件,该插件遍历所有元素的父母,并将他们的$.fn.container: ->
$parent: @parent()
if $parent.css('position') is 'relative'
return $parent
else
return $parent.container()
和scrollTop()
添加到该元素的scrollLeft()
。我没有对此进行彻底测试,所以请尝试一下,让我知道它是否适合您:jqPositionWithScrolling plugin
position()
不会自动执行此操作有点奇怪 - 我敢称之为错误。]
答案 1 :(得分:0)
将$container
的{{3}}和.scrollLeft()
添加到.position()
$foo
返回的值
那应该涵盖它..
<强> 更新 强>
要查找相对父级,您应使用以下
var $parent = $foo.parents()
.filter(
function(){
var position = $(this).css('position')
return position==='relative' || position==='absolute';
}
).eq(0);