2012-12-13 132 views
0

我有一个页面,锚点链接到页面的适当部分。我想知道是否有人有任何建议,当我点击链接时,如何切换锚链接的类,以及当窗口/页面使用jQuery滚动到适当的div?当滚动通过锚点div时,将类添加到锚点链接 - jquery

例如,有其链接到3段3个锚链接:

<ul> 
    <li><a href="#section1">Section 1</li> 
    <li><a href="#section2">Section 2</li> 
    <li><a href="#section3">Section 3</li> 
</ul> 

然后有3个部分:

<div id="section1"></div> 
<div id="section2"></div> 
<div id="section3"></div> 

我想什么做到的是当页面滚动到其中一个div或单击某个锚点时,锚点链接的类将切换。因此,如果单击#section 1锚点或页面滚动到#section1 div,则类将添加到section1锚点链接。如果第2节,则#section2链接将接收该类,并且第1节链接将删除该类,等等。

我想我可能需要一种方法来跟踪每个部分div的位置,然后在适当的链接上切换类,但我不太确定从哪里开始。

在此先感谢您的任何帮助或建议。

回答

3

我建议找到每个部分的总高度。我假设在每个部分之间也没有休息。然后使用jQuery来确定窗口的位置。当窗口位置达到一定值时,进行类别切换。希望这只能通过滚动才能完成,所以当你点击一个链接时,它将滚动并且前面描述的函数可以运行并为你改变类。

下面是一些伪代码

$(document).ready(function(){ 
    var section1Height = $('#section1').height(); 
    var section2Height = $('#section2').height(); 
    var section3Height = $('#section3').height(); 

    $(window).scroll(function() { 
     var winTop = $(window).scrollTop(); 
     if(winTop >= section1Height && winTop <= section2Height){ 
      $('#section1').addClass("newClass").not().removeClass("newClass"); 
     } else if(winTop >= section2Height && winTop <= section3Height){ 
      $('#section2').addClass("newClass").not().removeClass("newClass"); 
     } else if(winTop >= section3Height){ 
      $('#section3').addClass("newClass").not().removeClass("newClass"); 
     } 
    }); 
}); 

同样,这仅仅是一个简单的例子。有了更多的细节,我可以给出更详细的答案。

+0

非常感谢您的帮助!你的帮助非常大!另外一个快速问题。使用高度是可行的,但如果我想为该部分使用内联元素?因此,不是高度,会有一种方法来检测时间跨度滚动到40px的链接类会改变吗?我知道这不是我确切的问题,但任何建议将不胜感激。 –

+0

这是一个很好的问题。如果不进一步研究,我会建议将包装在Div中。因为span是内联的,所以我不确定jQuery能够获得它的高度,尽管我不明白为什么它不会。这可能是有趣的尝试 - 只需更改您的HTML反映跨度而不是div,但保持相同的ID,它应该仍然尝试工作。 – ntgCleaner