【发布时间】:2014-10-16 13:00:15
【问题描述】:
我在 5 秒后列出了 10 个元素,这些元素开始一个接一个地突出显示,而前一个元素未被突出显示。当突出显示到达最后一个元素时,它会从头开始。 突出显示是通过向元素添加选定的 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
【问题讨论】:
-
这个列表是在
overflow:hiddendiv 内还是 html 页面的直接子级? -
它是一个overflow里面的列表:hidden 并且列表的内容也是由javascript渲染的
-
尝试使用
nav.position().top而不是nav.offset().top,后者给出相对于文档的位置。但这仍然不能解释百搭值,除非你同时滚动页面 -
我已按照您的建议添加了使用位置的编辑。
-
我想我有解决方案,现在发布答案...
标签: javascript ruby-on-rails backbone.js coffeescript