javascript animate-ScrollTop随机工作

时间:2014-10-16 13:00:16

标签: javascript ruby-on-rails backbone.js coffeescript

我有一个列表10个元素,5秒后元素开始一个接一个地突出显示,而前一个元素没有突出显示。当高光到达最后一个元素时,它从开始开始。 突出显示是通过向元素添加选定的ID来完成的。 直到现在我才完成。

列表中只有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

任何一个人?

编辑: 将偏移量更改为位置后,我得到以下值: 这些不是那么疯狂,它不会按预期滚动,在第3-4个元素之后,所选择的一个在可见的那个之下

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

1 个答案:

答案 0 :(得分:2)

正如我在评论中提到的,您需要使用.position()代替.offset()来代替文档偏移量而不是文档偏移量。

由于订单在几个元素之后下降,听起来你需要递增scrollTop()而不仅仅是替换它。将此(未经测试的)代码改为:

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