2014-10-16 87 views
0

我有一個列表10個元素,5秒後元素開始被一個接一個地突出顯示,而前一個元素沒有被突出顯示。當highlighing達到從開始時開始的最後一個元素。 突出顯示是通過向元素添加選定的ID來完成的。 我已經完成,直到這一點。javascript animate-ScrollTop隨機工作

列表中只有3個元素可見,其餘的元素需要滾動到。 這是越來越棘手的地方。我已經使用:

scrollToSelected: => 
nav = $("#selected") 
if nav.length 
    $(@el).animate 
    scrollTop: nav.offset().top 
    , 1000 

這個腳本是做滾動,但並不如預期,它隨機滾動上下只是因爲它沒有知道項目的頂部。 問題在哪裏?

我曾嘗試在控制檯輸出.offset().top值,所以結果是這樣的:

171 
-627 
731 
-19 
1131 
-891 
419 
-299 
1011 
101 
-891 
419 
-299 
1011 
101 
-891 
419 
-299 
1011 
101 
-891 
419 
-299 
1011 
101 
-891 
419 
-299 
1011 
101 
-891 
419 
-299 
196.5 
248.5 
492.5 
512.5 
612.5 
-414.5 

任何thougths?

編輯: 改變偏移位置後,我得到這些值: 這些一個都沒有如此瘋狂的是,它不滾動如預期3-4th元素之後選定一個是波紋管可視那些

某處
10 
164 
174 
328 
322 
476 
486 
624 
634 
772 
798 
936 
950 
1100 
1098 
-1088 
+0

該列表是否在一個'overflow:hidden' div或html頁面的直接孩子? – 2014-10-16 13:24:04

+0

它在溢出內的列表:hidden並且列表的內容也由javascript呈現 – LogofaT 2014-10-16 13:31:29

+1

嘗試使用'nav.position().top'而不是'nav.offset().top',後者給出了相對於該文件。但是,這仍然不能解釋野值,除非你同時滾動頁面 – 2014-10-16 13:32:52

回答

2

正如我在評論中提到的,你需要使用.position()而不是.offset()爲TEH相對偏移,而不是文件偏移。

由於訂單在幾個元素後下降,這聽起來像你需要增加scrollTop()而不只是替換它。給這個(未經測試的)代碼去:

scrollToSelected: => 
    nav = $("#selected") 
    if nav.length 
    el = $(@el) 
    el.animate 
     scrollTop: el.scrollTop() + nav.position().top 
     , 1000 
+0

這個作品像魅力!謝謝您的回答!大喜歡:) – LogofaT 2014-10-16 14:10:59

+0

@LogofaT乾杯,這是我記得幾個月前與我自己打交道的事情之一。所有處理這些事情的教程都非常複雜。快樂編碼。 – 2014-10-16 14:46:26