3

我正在使用$.position相同的选择器,并且我得到了不同的top值结果。

问题可能在于在滚动 div 中获取选择器的位置。这就是为什么我使用$.position而不是$.offset,但似乎我做错了什么。

您可以尝试在我的小提琴上多次单击文本“获取位置”:http: //jsfiddle.net/FgftM/1/

一旦 div 滚动查找选择器,再次单击“获取位置”不应该做任何事情,因为我已经在选择器位置。

结果position值显示在底部。

为了阐明页面的结构,这里有一个草图: 在此处输入图像描述

原小提琴:http: //jsfiddle.net/BtZQE/16/

4

2 回答 2

2

我相信你想做的事情已经开始position: relative#content。这样,position计算的是相对于容器而不是整个页面。

http://jsfiddle.net/FgftM/6/

编辑:经过一些澄清后,您仍然需要,position: relative但您还需要添加当前scrollTop值:

http://jsfiddle.net/FgftM/8/

var top = dest.top + $('#content').scrollTop();
于 2013-06-26T16:41:13.100 回答
1

@James 有一个正确的解决方案,但要提供额外的说明:position相对于offsetParent,它不一定是元素的直接祖先。

有关用于确定元素的 offsetParent 的算法,请参阅http://www.w3.org/TR/cssom-view/#offset-attributes

正如James所指出的,这里的相关点是offsetParent的位置属性必须不是静态的,如果没有这样的祖先,offsetParent将是body元素

于 2013-06-26T17:03:54.810 回答