当前位置: 首页 > 知识库问答 >
问题:

刷新页面后保持锚点链接活动类(平滑锚点滚动)

狄奕
2023-03-14

我需要一些帮助如何保持保持当前锚链接活动后刷新页面。实际上,我有这个垂直的navbar菜单(http://prntscr.com/fz9yct),默认情况下,我将类active添加到中,所以当我们打开页面时,navbar看起来就像您在屏幕截图中看到的那样。

当我滚动,或单击任何其他navbar列表项,一切工作良好,平滑滚动到适当的部分,并删除类活动从上一个锚链接,并添加到适当的。

问题是当我刷新page类active时,active类并没有保持在它应该在的位置,而是分配给#home锚点链接,尽管内容保持在刷新前的位置。你能帮我把它修好吗?

我使用$(window).ON('beforeunload',function(){尝试了一些解决方案,但不起作用

null

<div class="main-menu-container">
  <nav class="main-menu" id="navbar" aria-label="Main Menu">
    <ul role="menubar" class="center">
      <li class="menubar__item">
        <a href="#home" class="active block" title="Home">
          <span class="menubar__item--icon block">
                  SVG ICON HERE
                </span>
          <span class="menubar__item--text">Home</span>
        </a>
      </li>
      <li class="menubar__item">
        <a href="#about" class="block" title="About">
          <span class="menubar__item--icon block">
                  SVG ICON HERE
                </span>
          <span class="menubar__item--text">About</span>
        </a>
      </li>
      <li class="menubar__item">
        <a href="#experience" class="block" title="My Experience">
          <span class="menubar__item--icon block">
            SVG ICON HERE
                </span>
          <span class="menubar__item--text">Experience</span>
        </a>
      </li>
      <li class="menubar__item">
        <a href="#services" class="block" title="What I provide">
          <span class="menubar__item--icon block">
                  SVG ICON HERE
                 </span>
          <span class="menubar__item--text">Services</span>
        </a>
      </li>
      <li class="menubar__item">
        <a href="#contact" class="block" title="Get in touch">
          <span class="menubar__item--icon block">
                  SVG ICON HERE
                </span>
          <span class="text">Contact</span>
        </a>
      </li>
    </ul>
    <!-- /.menubar end -->
  </nav>
  <!-- /.main-menu end -->
</div>
<!-- / .main-menu-container end -->

null

null

$(document).ready(function() {
  $(document).on("scroll", onScroll);

  $('a[href*="#"]:not([href="#"])').click(function() {

    if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) {

      var target = $(this.hash);
      target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');


      if (target.length && $(this).attr("href") == '#home') {
        $("html, body").animate({
          scrollTop: target.offset().top
        }, 1000);
      } else {
        $("html, body").animate({
          scrollTop: target.offset().top + 2
        }, 1000);
      }
      return false;
    }
  });
});

function onScroll(event) {
  var scrollPos = $(document).scrollTop();
  $('#navbar a').each(function() {
    var currLink = $(this);
    var refElement = $(currLink.attr("href"));
    if (refElement.offset().top <= scrollPos && refElement.offset().top + refElement.height() > scrollPos) {
      $('#navbar ul li a').removeClass("active");
      currLink.addClass("active");
    } else {
      currLink.removeClass("active");
    }
  });
}

null

共有1个答案

彭雨华
2023-03-14

看起来您使用了该答案,但单击时忘记删除类。

  $('a').each(function () {
        $(this).removeClass('active');
  })
  $(this).addClass('active');
 类似资料:
  • 问题内容: 我的页面上有几个超链接。用户访问我的帮助部分时将阅读的常见问题解答。 使用锚点链接,我可以使页面滚动到锚点并在那里引导用户。 有没有办法使滚动平滑? 但是请注意,他正在使用自定义JavaScript库。也许jQuery提供了类似的功能? 问题答案: 现在有一种本地方法可以做到这一点: 当前仅最先进的浏览器才支持此功能。 对于较旧的浏览器支持,可以使用以下jQuery技术: 如果您的目标

  • 问题内容: 有没有一种方法可以使用jQuery向下滚动到锚链接? 喜欢: ? 问题答案: 这是我的方法: 然后,您只需要像这样创建锚:

  • 问题内容: 我想让浏览器仅使用JavaScript即可将页面滚动到给定的锚点。 我在HTML代码中指定了或属性: 要么 通过导航到,我希望获得与您相同的效果。应滚动页面,使锚点位于页面可见部分的顶部附近。 问题答案: 完全不需要jQuery!

  • 问题内容: 我有一系列使用锚机制的链接: 我正在使用以下CSS: 一切正常。但是,当然,当我们单击链接时,它会从一个部分跳到下一个部分。因此,我想使用某种滚动到所选部分的开头进行平滑过渡。 我想我在Stackoverflow上读到,CSS3尚不可能(但现在),但是我想确认一下,并且我想知道什么是“可能的”解决方案。我很高兴使用JS,但不能使用jQuery。我试图在链接上使用on click功能,检

  • 问题内容: 有人可以告诉我我在做什么错吗?我需要在一段时间后刷新页面,但是它会刷新到页面顶部,我需要不更改页面位置!所以这是我现在无法使用的,是meta标签吗?这是我所没有的仍然不刷新必须做错了什么吗? 这是我本来的… 阅读了一些初始答案后,我将其更改为… 问题答案: 更新 您可以使用下面提到的方法代替下面的强制技巧。 将HTML替换为:

  • 我需要设置一个ng click事件,以便它加载一个新页面,然后,一旦页面加载完毕,滚动到页面上的一个定位点。我已经尝试了这篇文章中提出的每一个解决方案,但我无法让它正常工作。 大多数解决方案都围绕着滚动到已经加载的页面上的锚定。我需要在加载新页面后出现滚动。 这表示“配置文件卡”中的按钮。当用户点击卡片时,它会将他们带到一个个人资料页面。但是,当他们单击按钮时,它需要将他们带到该配置文件页面的#j