Smooth Scroll — это библиотека, которая позволяет реализовать плавную прокрутку страницы к определённым элементам при клике на ссылки или программно через вызов методов. Она особенно полезна для улучшения пользовательского опыта при навигации по длинным страницам или при работе с одностраничными сайтами (SPA).
Для начала необходимо подключить библиотеку. Обычно это делается через CDN:
<script src="https://cdn.jsdelivr.net/npm/smooth-scroll@16/dist/smooth-scroll.polyfills.min.js"></script>
После подключения можно создавать экземпляр Smooth Scroll:
const scroll = new SmoothScroll('a[href*="#"]', {
speed: 800,
speedAsDuration: true,
easing: 'easeInOutCubic',
offset: 50
});
speed — скорость анимации прокрутки в
миллисекундах.speedAsDuration — если true, скорость
интерпретируется как фиксированная длительность анимации, а не зависящая
от расстояния.easing — функция сглаживания движения. Доступны
стандартные варианты, такие как linear,
easeInQuad, easeOutQuad,
easeInOutCubic.offset — смещение в пикселях от верхнего края страницы.
Особенно полезно, если есть фиксированное меню.Smooth Scroll позволяет не только работать с ссылками, но и запускать прокрутку программно:
scroll.animateScroll(document.querySelector('#section2'));
Можно передать дополнительные параметры:
scroll.animateScroll(document.querySelector('#section3'), null, {
speed: 1000,
offset: 100
});
В этом случае анимация будет длиться 1000 мс, а позиция элемента сместится на 100 пикселей от верхнего края окна.
Хлебные крошки (breadcrumbs) часто используются для
навигации по иерархии страниц. Smooth Scroll позволяет интегрировать их
с плавной прокруткой, если элементы хлебных крошек ведут к разделам
одной страницы.
Пример HTML-структуры хлебных крошек:
<nav class="breadcrumbs">
<a href="#home">Главная</a>
<a href="#category">Категория</a>
<a href="#item">Товар</a>
</nav>
Инициализация Smooth Scroll для хлебных крошек:
const breadcrumbScroll = new SmoothScroll('.breadcrumbs a', {
speed: 700,
offset: 60
});
Теперь при клике на любой пункт навигации будет происходить плавная прокрутка к соответствующему разделу страницы.
Smooth Scroll предоставляет возможности для обработки событий анимации через колбэки:
before — вызывается перед началом прокрутки.after — вызывается после завершения анимации.Пример использования:
const scrollWithCallbacks = new SmoothScroll('.breadcrumbs a', {
speed: 600,
offset: 50,
before: function(anchor, toggle) {
console.log('Начало прокрутки к:', anchor);
},
after: function(anchor, toggle) {
console.log('Прокрутка завершена к:', anchor);
}
});
Колбэки особенно полезны для динамического изменения стилей активных пунктов хлебных крошек или для запуска других скриптов после завершения прокрутки.
scroll.refresh();
offset, который
компенсирует высоту фиксированного хедера.Smooth Scroll совместим с большинством UI-библиотек и фреймворков. В React, Vue или Angular рекомендуется инициализировать Smooth Scroll после того, как компонент будет отрендерен, чтобы все ссылки уже существовали в DOM:
useEffect(() => {
const scroll = new SmoothScroll('a[href*="#"]', { speed: 800 });
return () => scroll.destroy();
}, []);
Это предотвращает ошибки, связанные с отсутствием элементов на момент инициализации.
offset при фиксированных шапках или
меню.easing для достижения наиболее приятной
анимации.refresh() при динамическом
изменении DOM.Smooth Scroll предоставляет простую и гибкую реализацию плавной прокрутки, идеально подходящую для навигации через хлебные крошки на длинных страницах и улучшения UX.