将类添加到<李>元素
Adding a class to a link inside a <li> element on scrolling
当页面的某个部分处于活动状态时,是否可以将类添加到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;
}
我想做的是,每当到达页面的特定部分时,将class.current添加到li元素内的链接中。
我相信只有使用Javascript才能实现这一点,有人能为我指明实现这一目标的正确途径吗?
提前感谢
我认为您希望在引导程序中使用类似于scrollspy的东西,你可以使用它,也可以找到https://gist.github.com/pascaldevink/2380129Bypascardevink
或者这是小提琴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);
使用悬停功能可以实现这一点。即,在悬停页面的特定部分时,将类添加到li内的链接中。例如
$('#specificPartOfPageId').hover(function(){
$('#links').children().children('a').addClass('current');
});
这将把.current类添加到该UL元素内存在的每个链路
希望这能有所帮助。
如果我理解正确,我想这就是您所需要的: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:first-child
、li:nth-child(2)
等)瞄准列表中的不同<li>
。
相关文章:
- Ckeditor-plugin:插入虚假元素add不情愿<p>标签前后
- 如何首先设置样式<td>表中包含在窗体中的元素
- 如何附加<ul><李>元素位于某个特定条件的父元素列表之间
- 在验证器中添加自定义规则以检查<ul>具有元素
- 调整<音频>元素
- <的自定义进度条;音频>并且<进度>HTML5元素
- 转换<a>使用jQuery将文本字符串转换为dom元素
- react-让一个元素返回两个相邻的<tr>标签
- <h1>标签在离子含量元素中不可见
- 更改<td>更改事件的元素值
- 为什么不是't html<对象>元素响应鼠标事件
- 更改每个<李>元素在<ol>
- 点击<选择>元素,但不在<选项>
- Jquery将css类添加到父级<ul>元素
- jQuery对嵌套在<李>并且<a>元素,同时离开父<ul>打开
- 单击事件在替换<使用>元素在<svg>(Win7/IE11)
- 将换行符写入<span>元素
- 如何正确地获得<i><p>元素
- HTML5<视频>元素在Firefox、Opera和Safari中不起作用
- 我正试图动态地拉动<h3>元素,并将它们放在选择列表中