Плавный скролл js (плавная прокрутка меню)

плавный скролл js

Часто на длинных лендингах требуется быстрая прокрутка до нужного блока или секции без перехода на другую страницу. Например посетитель заинтересовался услугой и ему вот прям срочно нужно узнать цены или контакты или отзывы.

 

Для этого в фиксированной шапке сайта размещают меню с ссылками на якоря у нужных блоков для быстрого скролла из меню. Самый простой способ — присвоить id к нужному блоку и в ссылке разместить указатель на него через #.

Например:

<a href="#section1" class="menu-link">Link1</a>

 

Это сработает НО! переход на блок будет мгновенный. Это достаточно неприятно для глаз пользователя да и не очень эстетично)
Гораздо интереснее выглядит плавный скролл меню до блока.

 

Рассмотрим пример плавной прокрутки меню. Для этого создаем простую разметку с фиксированным меню и несколькими секциями. Каждая секция имеет свой уникальный id. В меню ссылки ссылаются на соответствующие id.

 

  <header class="header">
    <div class="container">
      <nav id="menu" class="menu">
        <a href="#section1" class="menu-link">Link1</a>
        <a href="#section2" class="menu-link">Link2</a>
        <a href="#section3" class="menu-link">Link3</a>
        <a href="#section4" class="menu-link">Link4</a>
      </nav>
    </div>
  </header>
  <section id="section1">
    <h2>Section1</h2>
  </section>
  <section id="section2">
    <h2>Section2</h2>
  </section>
  <section id="section3">
    <h2>Section3</h2>
  </section>
  <section id="section4">
    <h2>Section4</h2>
  </section>

 

Добавим немного стилей css для наглядности. Меню фиксируем наверху. Секциям выставляем высоту 100vh (равно высоте экрана устройства) и раскрашиваем разными цветами.

.header {
  position: fixed;
  left: 0;
  top: 0;
  width: 100%;
}
.menu {
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
}
section {
  height: 100vh;
}
#section1 {
  background-color: #fff;
}
#section2 {
  background-color: #eee;
}
#section3 {
  background-color: #ddd;
}
#section4 {
  background-color: #ccc;
}

 

Ну и главная фишка плавного скролла — JS код плавной прокрутки

$("a.menu-link").on("click", function (event) { // отлавливаем событие клика на ссылку

  event.preventDefault(); // отменяем стандартное действие клика на ссылку

  var id  = $(this).attr('href'), // определяем переменную id из аттрибута href ссылки

  top = $(id).offset().top; // определяем позицию элемента от верхнего края документа

  $('body,html').animate({scrollTop: top}, 500); // магия jquery - плавная прокрутка (500 - время в мс)
});

 

По JS каждая строка прокомментирована в коде, поэтому даже нечего добавить)))

 

Не забывайте что скрипт работает только когда на странице подключена библиотека jQuery!

 

Полный код работающего примера можно посмотреть в моем Codepen.

 

Поделиться

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *