【问题标题】:Jquery - How to make a menu button removeClass when I scroll?Jquery - 我滚动时如何制作菜单按钮removeClass?
【发布时间】:2016-03-11 16:13:02
【问题描述】:

所以我有一个单页网站,当您单击顶部菜单上的按钮时,它会滚动到各个部分。我使用下面的代码来切换任何被点击的按钮的类,改变它的外观。

问题是,如果用户随后决定手动滚动到另一个部分,我希望按钮失去该类,以便它恢复到原来的外观。

另外,如果用户手动滚动到顶部,我希望“主页”按钮重新获得课程。

...换句话说,在 (document).ready 我将“buttonActive”类添加到 Home 按钮,因此访问者知道他们在哪里...

$("#menu-item-124 a").addClass("buttonActive");

...当他们点击一个按钮进入较低的部分时,他们点击的按钮会获得“buttonActive”类...

$("ul.menu li a").click(function() {
  $("ul.menu li a").not(this).removeClass("buttonActive");
  $(this).toggleClass("buttonActive");
});

...但是当用户手动滚动到另一个部分时,我怎样才能让按钮现在失去“buttonActive”类?

...当用户手动滚动到顶部时,如何让“Home”按钮重新获得“buttonActive”类?

感谢所有帮助。谢谢!

【问题讨论】:

    标签: jquery css class menu


    【解决方案1】:

    您可以使用 $( window ).scroll() 函数。

    1. 将“buttonActive”类添加到主页链接。
    2. 在窗口上添加滚动事件监听器
    3. 如果窗口滚动位置($(window).scrollTop();)等于 0 或小于第一部分偏移量($('.section1').offset().top)然后删除“buttonActive " 类来自“#menu-item-124”中的所有链接,并将“buttonActive”类添加到 Home 链接。
    4. 如果滚动位置大于 section1 偏移量且小于 section2 偏移量,则从所有链接中删除“buttonActive”类,并将“buttonActive”类添加到 section1 的相应链接。
    5. 其他部分同样可以使用。

    创建了一个模型:

    HTML:

    <div class='main-container'>
          <div id="menu-item-124">
            <a class="buttonActive">Home</a>
            <ul class="menu">
              <li><a>Section1</a></li>
              <li><a>Section2</a></li>
              <li><a>Section3</a></li>
            </ul>
          </div>
    
          <div class="home">
          </div>
          <div class="section1">
          </div>
          <div class="section2">
          </div>
          <div class="section3">
          </div>
        </div>
    

    CSS

    #menu-item-124 {
      width: 100%;
      height: 50px;
      top: 0;
      left: 0;
      background-color: blue;
      position: fixed;
    }
    
    #menu-item-124 ul {
      list-style: none;
    }
    
    #menu-item-124 a {
      display: inline;
    }
    
    #menu-item-124 ul li {
      display: inline;
    }
    
    .home {
      background-color: white;
      height: 600px;
    }
    
    .section1 {
      background-color: yellow;
      height: 600px;
    }
    
    .section2 {
      background-color: black;
      height: 600px;
    }
    
    .section3 {
      background-color: red;
      height: 600px;
    }
    
    .buttonActive {
      background-color: yellow;
    }
    

    jQuery

    $(window).on('scroll', function(e) {
      if ($(this).scrollTop() < $('.section1').offset().top) {
        $("#menu-item-124 a").removeClass("buttonActive");
        $("#menu-item-124 a:eq(0)").addClass("buttonActive");
      } else if ($(this).scrollTop() > $('.section1').offset().top && $(this).scrollTop() < $('.section2').offset().top) {
        $("#menu-item-124 a").removeClass("buttonActive");
        $(".menu li:eq(0) a").addClass("buttonActive");
      } else if ($(this).scrollTop() > $('.section2').offset().top && $(this).scrollTop() < $('.section3').offset().top) {
        $("#menu-item-124 a").removeClass("buttonActive");
        $(".menu li:eq(1) a").addClass("buttonActive");
      } else if ($(this).scrollTop() > $('.section2').offset().top) {
        $("#menu-item-124 a").removeClass("buttonActive");
        $(".menu li:eq(2) a").addClass("buttonActive");
      }
    });
    

    JS Fiddle : 刚刚创建了一个粗略的模型。提供的代码可以改进很多。只是给出有关如何实现您正在尝试的想法的想法。

    谢谢

    【讨论】:

    • 谢谢。我还没有机会尝试这个,但我很快就会。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    相关资源
    最近更新 更多