在滚动</li>上的<li>元素内的链接中添加一个类

时间:2014-09-19 12:54:18

标签: javascript html css class add

当页面的某个部分处于活动状态时,是否可以在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才能实现这一点,有人能指出我实现这一目标的正确途径吗?

提前致谢

3 个答案:

答案 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)