当页面的某个部分处于活动状态时,是否可以在li元素内的链接中添加一个类?
我有一个单页网站,并希望在通过滚动到达页面的特定部分时更改链接的颜色。
这是我的HTML:
<header id="header">
<section class="container">
<nav>
<a class="logo" href="index.html">Logo</a>
<div id="menu">
<ul id="links">
<li><a href="#services">Services</a></li>
<li><a href="#about">About</a></li>
<li><a href="#clients">Clients</a></li>
<li class="last"><a href="#contact">Contact</a></li>
</ul>
</div>
</nav>
</section>
</header>
这就是CSS:
#menu li a {
color:#7a7a7a;
text-decoration: none;
font-size: 12px;
margin-right:20px;
}
#menu li.last a {
color:#7a7a7a;
text-decoration: none;
font-size: 12px;
margin-right:0px;
}
#menu li.current a {
color: #0086be;
}
我想要做的是每当到达页面的特定部分时,将类.current添加到li元素内的链接。
我相信只有使用Javascript才能实现这一点,有人能指出我实现这一目标的正确途径吗?
提前致谢
答案 0 :(得分:2)
我认为你想要在bootstrap中使用 scrollspy 之类的东西, 你可以使用它,或者你可以找到https://gist.github.com/pascaldevink/2380129 bypascaldevink
或者这里是小提琴http://jsfiddle.net/ia_archiver/Kb7xq/
你需要jquery,
$.fn.scrollspy = function ( option ) {
return this.each(function () {
var $this = $(this)
, data = $this.data('scrollspy')
, options = typeof option == 'object' && option
if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))
if (typeof option == 'string') data[option]()
})
}
$.fn.scrollspy.Constructor = ScrollSpy
$.fn.scrollspy.defaults = {
offset: 10
}
$(function () {
$('[data-spy="scroll"]').each(function () {
var $spy = $(this)
$spy.scrollspy($spy.data())
})
})
}(window.jQuery);
答案 1 :(得分:1)
使用悬停功能可以实现此目的。在悬停页面的特定部分时,您将类添加到li内部的链接。 e.g。
$('#specificPartOfPageId').hover(function(){
$('#links').children().children('a').addClass('current');
});
这会将.current类添加到UL元素中的每个链接 希望这会有所帮助。
答案 2 :(得分:0)
如果我理解正确,我想这就是你所需要的:jsFiddle。 CSS和HTML代码保持不变,这是我使用过的jQuery代码:
$(window).scroll(function() {
var scroll = $(window).scrollTop();
if (scroll > 500) {
$("#links li:first-child").addClass("current");
}
if (scroll > 750) {
$("#links li:first-child").removeClass("current");
$("#links li:nth-child(2)").addClass("current");
}
var scrollBottom = $(window).scrollTop() + $(window).height();
if (scroll < 500) {
$("#links li:first-child").removeClass("current");
}
if (scroll < 750) {
$("#links li:nth-child(2)").removeClass("current");
}
});
基本上,当您向下滚动到500px时,li:first-child
会自动分配current
类。您可以根据需要添加更多if
个查询来修改jQuery以满足您的需求。您可以使用<li>
,li:first-child
等不同的子选择器定位列表中的不同li:nth-child(2)
。