Сохранять активный класс ссылки привязки после обновления страницы (плавная прокрутка привязки)

Мне нужна помощь, как сохранить текущую ссылку привязки активной после обновления страницы. Практически, у меня есть это вертикальное навигационное меню ( http://prntscr.com/fz9yct), по умолчанию я добавил активный класс в <a href="#home"> поэтому, когда мы открываем страницу, навигационная панель выглядит так, как вы видите на скриншоте.

Когда я прокручиваю или нажимаю на любой другой элемент списка панели навигации, все работает хорошо, плавно прокручиваю к соответствующему разделу, удаляю класс active из предыдущей ссылки привязки и добавляю к соответствующему.

Проблема в том, что когда я обновляю активный класс страницы, активный класс не остается там, где он должен быть, а назначается привязке #home, хотя содержимое остается там, где оно было до обновления. Можете ли вы помочь мне, как это исправить?

Я попытался какое-то решение с $(window).on('beforeunload', function() { но не работает

<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 -->

$(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");
    }
  });
}

1 ответ

Похоже, вы используете этот ответ и забыли удалить класс при нажатии.

  $('a').each(function () {
        $(this).removeClass('active');
  })
  $(this).addClass('active');
Другие вопросы по тегам