我有一个列表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
答案 0 :(得分:2)
正如我在评论中提到的,您需要使用.position()
代替.offset()
来代替文档偏移量而不是文档偏移量。
由于订单在几个元素之后下降,听起来你需要递增scrollTop()
而不仅仅是替换它。将此(未经测试的)代码改为:
scrollToSelected: =>
nav = $("#selected")
if nav.length
el = $(@el)
el.animate
scrollTop: el.scrollTop() + nav.position().top
, 1000