javascript:scrollTop和offsetTop之间的区别

javascript:scrollTop和offsetTop之间的区别,javascript,scroll,offset,Javascript,Scroll,Offset,在导航到元素后,元素的累积偏移量与滚动顶部的值之间是否存在可预测的关系 我天真地认为它们是相等的,但我遇到过scrollTop更大的情况(滚动位置在页面下方更远) 下面更准确地定义了这个问题: function TotalOffsetTop (e) { var offset = 0; do offset += e.offsetTop; while (e = e.offsetParent); return offset; } //navigate

在导航到
元素后,
元素的累积
偏移量与
滚动顶部的值之间是否存在可预测的关系

我天真地认为它们是相等的,但我遇到过
scrollTop
更大的情况(滚动位置在页面下方更远)

下面更准确地定义了这个问题:

function TotalOffsetTop (e)
{
    var offset = 0;
    do 
        offset += e.offsetTop;
    while (e = e.offsetParent);
    return offset;
}

//navigate to MyBookmark
location.hash = "#MyBookmark"

var BookmarkOffsetTop = TotalOffsetTop(document.getElementByID("MyBookmark"));   
var CurrentPosition = document.getElementsByTagName("body")[0].scrollTop;

if ( CurrentPosition != BookmarkOffsetTop ) alert("Design Flaw!");
我的最终目标是找到最近的
标记,其起点位于当前视口顶部之上。这样我就可以相对于文档中的当前位置向后(和向前)跳转到书签

我是否应该使用一些其他措施来代替
scrollTop
和累积
offsetTop


我正在使用Chrome探索这个问题,但我希望最终找到至少在几种现代浏览器中都能工作的东西。我尽量避免使用jQuery。

主要的区别是,不涉及太多细节:

offsetTop是只读的,而scrollTop是读/写的。 根据这一点,如果您使用Offsetop,您会更安全:

注意html元素的scrollTop属性

在早于版本8的Internet Explorer中,它检索滚动条 以物理像素大小表示的数量,而从版本8开始,它返回 以逻辑像素大小表示的数量。这是什么意思?如果浏览器不可用 在正常缩放级别(用户能够放大或缩小 网页:CTRL和+,CTRL和-,scrollTop属性有效 与版本8不同于早期版本

在版本8之前的Internet Explorer中,滚动量以默认像素大小计算,即使当前像素大小为 文件是不同的。 在Internet Explorer 8和Firefox、Opera、Google Chrome和Safari中,滚动量以当前像素大小计算

例如,如果缩放级别为200%,则scrollTop属性 检索版本8之前的值是版本8中的值的两倍 8表示相同的滚动位置

文本来源和关于这两个方面的更多信息:

谢谢!我的问题是寻找一种方法来计算它们之间的差异,但这给了我重构的想法,以避免
location.hash=“#MyBookmark”
滚动到意外位置的问题。+1尝试避免jquery希望你能接受答案否?