2013-12-09 49 views
9

在導航到該元素之後,<a>元素的累積offsetTopscrollTop的值之間是否存在可預測的關係?javascript:scrollTop和offset之間的區別頂部

我曾天真地認爲他們會是平等的,但我遇到了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!"); 

我的最終目標是要找到最近的<a>標籤,其開始高於當前視口的頂部。這樣我就可以向後(向前)跳轉到相對於文檔當前位置的書籤。

是否有其他一些措施,我應該使用,而不是scrollTop和cummulative offsetTop

我正在探索使用Chrome的問題,但我想最終找到一些適用於至少幾個現代瀏覽器的東西。我試圖避免jQuery。

+3

+1試圖避免的jQuery –

+0

希望你能接受的答案沒有? – Sampath

回答

2

沒有得到太多的細節的主要區別在於:當scrollTop的讀/寫

的offsetTop是隻讀的。 據此,如果您要使用offsetTop:

請注意html元素的scrollTop屬性!

在Internet Explorer早於第8版,它檢索在物理像素尺寸滾動 量,同時從版本8,則返回邏輯像素大小的 量。這是什麼意思?如果瀏覽器不是正常縮放級別的 (用戶可以放大或縮小網頁:CTRL和+,CTRL和 - ),則scrollTop屬性的工作原理 與版本8的工作方式不同,而不是早期版本。

即使當前文檔不同, 中的當前像素大小也會在版本8之前的Internet Explorer中以默認像素大小計算滾動量。 在Internet Explorer 8和Firefox,Opera,Google Chrome和Safari中,滾動量按當前像素大小計算。

例如,如果縮放級別爲200%,則對於相同的滾動位置,scrollTop屬性 會檢索版本8之前的值比從版本 8檢索的值大兩倍。

源文本和更多信息的兩個: Source

+0

謝謝!我的問題是尋求一種方法來計算它們之間的差異,但這給了我一個重構的想法,以避免'location.hash =「#MyBookmark」'滾動到意想不到的位置。 – dlh