【发布时间】:2013-10-30 03:42:35
【问题描述】:
我在 DOM 中有一个对象列表,它比屏幕高度区域长。
我只需要检测屏幕上的可见对象来制作时间轴树视图之类的东西。 (如下图所示):
我的 DOM 如下所示:
<!-- elements visibility on screen to be DETECTED -->
<div id="elements">
<div id="elem-1">Lorem ipsum</div>
<div id="elem-2">Lorem ipsum</div>
<div id="elem-3">Lorem ipsum</div>
<div id="elem-4">Lorem ipsum</div>
<div id="elem-5">Lorem ipsum</div>
<div id="elem-6">Lorem ipsum</div>
<div id="elem-7">Lorem ipsum</div>
<div id="elem-8">Lorem ipsum</div>
</div>
<!--elements visibility on screen to be AFFECTED -->
<ul id="timeline">
<li view-id="elem-1">Elem-1</li>
<li view-id="elem-2">Elem-2</li>
<li view-id="elem-3" class="active">Elem-3</li>
<li view-id="elem-4" class="active">Elem-4</li>
<li view-id="elem-5" class="active">Elem-5</li>
<li view-id="elem-6" class="active">Elem-6</li>
<li view-id="elem-7">Elem-7</li>
<li view-id="elem-8">Elem-8</li>
</ul>
我的目标是从 #elements 容器中检测屏幕上可见元素的 ID,并将 active 类分配给 #timeline 容器中的相应元素。
我需要在 Scroll 事件上执行此过程。
任何想法如何实现这一目标?
【问题讨论】:
-
您需要遍历每个元素并将其
top与文档的scrollTop进行比较,并将bottom与文档的scrollTop + height进行比较。 -
这个问题不重复,其他链接的问题想知道一个元素是否在视口中,这个想知道多个元素中的哪一个是视口中的第一个可见元素跨度>
标签: javascript jquery html css dom