2014-10-16 109 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