47 html javascript css jquery dom
我在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>
Run Code Online (Sandbox Code Playgroud)
我的目标是从#elements
容器中检测屏幕上可见元素的ID,并将active
类分配给容器中的相应元素#timeline
.
我需要在Scroll
事件上执行此过程.
任何想法如何实现这一目标?
zur*_*4ik 41
首先on-screen visible area
被称为Viewport
.
(图像取自OP.在Photoshop中清除和编辑)
所以你需要的只是检测你的所有元素Viewport
.
这可以使用jQuery的许多插件来实现,但我会在一个例子中解释你,这被称为 jQuery withinviewport
链接到源代码和文档:[withInViewport - Github]
下载插件并在脚本中包含jQuery
框架和withinviewport
插件:
<script src="http://code.jquery.com/jquery-1.7.min.js"></script>
<script src="withinViewport.js"></script>
<script src="jquery.withinviewport.js"></script>
Run Code Online (Sandbox Code Playgroud)
.
scroll
事件初始化函数:
$(window).bind("scroll", function() {
//your code placeholder
});
Run Code Online (Sandbox Code Playgroud)
.
使用withinviewport
选择器获取Viewport中的所有元素,并通过每个元素将类添加到#timeline
容器中的相应列表项:
$("#elements > div").withinviewport().each(function() {
$('#timeline > li[view-id="'+$(this)[0].id+'"]').addClass('active');
});
Run Code Online (Sandbox Code Playgroud)
全部放在一起:
$(window).bind("scroll", function() {
//clear all active class
$('#timeline > li').removeClass('active');
//add active class to timeline
$("#elements > div").withinviewport().each(function() {
$('#timeline > li[view-id="'+$(this)[0].id+'"]').addClass('active');
});
});
Run Code Online (Sandbox Code Playgroud)
.
.
此插件还为您提供了为视口设置顶部,底部,左侧和右侧偏移的机会.
请参阅此处的演示:http://patik.com/code/within-viewport/
归档时间: |
|
查看次数: |
27384 次 |
最近记录: |