【问题标题】:Add class to anchor link when scrolling past anchor div - jquery滚动过去锚div时将类添加到锚链接 - jquery
【发布时间】:2012-12-13 17:01:56
【问题描述】:

我有一个带有锚点的页面,这些锚点链接到页面的适当部分。我想知道是否有人对我如何在单击链接时以及当窗口/页面使用 jQuery 滚动到适当的 div 时如何切换锚链接的类有任何建议?

例如,有 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 的位置,然后在适当的链接上切换类,但我不太确定从哪里开始。

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

【问题讨论】:

    标签: jquery scroll


    【解决方案1】:

    我建议找出每个部分的总高度。我假设每个部分之间也没有中断。然后使用 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");
            }
        });
    });
    

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

    【讨论】:

    • 非常感谢您的帮助!你帮了大忙!一个额外的快速问题。使用高度是可行的,但是如果我想为该部分使用内联元素 怎么办?因此,除了高度之外,还有一种方法可以检测跨度何时滚动到 40 像素,然后链接类会发生变化?我知道这不是我的确切问题,但任何建议将不胜感激。
    • 这是个好问题。无需进一步研究,我建议将 包装在一个 Div 中。由于跨度是内联的,我不确定 jQuery 是否可以提升它的高度,尽管我不明白为什么它不会。尝试这可能会很有趣 - 只需更改您的 html 以反映跨度而不是 div,但保持相同的 ID,它仍应尝试工作。
    猜你喜欢
    • 2011-09-03
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 2021-04-03
    相关资源
    最近更新 更多