Smooth Scroll — это библиотека для плавной прокрутки страницы к элементам при навигации по ссылкам. Основная задача библиотеки — заменять стандартное резкое перемещение браузера плавной анимацией, улучшая пользовательский опыт и визуальное восприятие страницы.
Библиотека работает на основе прослушивания событий клика по ссылкам с определёнными атрибутами, вычисления позиции целевого элемента и применения CSS-трансформаций или JavaScript-анимаций для прокрутки окна.
import SmoothScroll from 'smooth-scroll';
const scroll = new SmoothScroll('a[href*="#"]', {
speed: 500,
offset: 50,
easing: 'easeInOutCubic'
});
Ключевые параметры:
speed — длительность анимации прокрутки в
миллисекундах.offset — смещение от верхней границы окна для точной
подгонки позиции элемента.easing — функция плавности анимации, поддерживаются
стандартные кривые CSS или предопределённые функции библиотеки.Библиотека требует передачи селектора ссылок для отслеживания и объекта с настройками. Селектор может быть общим для всех якорных ссылок или специфичным для отдельных секций.
const scroll = new SmoothScroll('.nav-link', {
speed: 700,
offset: 100,
clip: true
});
Опции конфигурации:
clip — если true, гарантирует, что целевой элемент не
будет обрезан при прокрутке.updateURL — обновляет адрес страницы в адресной строке
при переходе к якорю.popstate — управление поведением при использовании
кнопок браузера «Назад» и «Вперед».Эти параметры позволяют интегрировать Smooth Scroll с системой роутинга на клиентской стороне, чтобы URL и прокрутка оставались синхронизированы.
При работе с динамически подгружаемыми элементами важно повторно инициировать прокрутку или пересчитать позиции целевых блоков. Smooth Scroll предоставляет методы для обновления:
scroll.refresh();
Метод refresh() пересчитывает позиции элементов с
якорями, что критично при изменении DOM после загрузки данных с сервера
или при анимации появления контента.
Smooth Scroll поддерживает события на разных стадиях анимации. Это позволяет интегрировать прокрутку с системой роутинга или триггерить другие действия:
document.addEventListener('scrollStart', function(event) {
console.log('Прокрутка началась');
});
document.addEventListener('scrollStop', function(event) {
console.log('Прокрутка завершена');
});
Основные события:
scrollStart — начало анимации.scrollStop — завершение анимации.scrollCancel — отмена прокрутки пользователем или
скриптом.Использование событий позволяет связывать прокрутку с состоянием роутинга, например, обновлять активные элементы меню при переходе к секции.
При SPA (Single Page Application) и фронтенд-фреймворках часто требуется синхронизация URL и прокрутки. Smooth Scroll поддерживает автоматическое обновление URL:
const scroll = new SmoothScroll('a[href*="#"]', {
speed: 600,
updateURL: true,
popstate: true
});
updateURL: true — при клике на ссылку с якорем адрес
страницы меняется без перезагрузки.popstate: true — при использовании кнопок браузера
происходит плавная прокрутка к соответствующему элементу.Для более сложных роутеров (React Router, Vue Router) можно вручную вызывать прокрутку к элементу после завершения перехода маршрута:
import { animateScroll } from 'smooth-scroll';
animateScroll(document.querySelector('#section2'), {
speed: 500,
offset: 80
});
Фиксированные шапки и смещения При наличии
фиксированного хедера важно использовать параметр offset,
чтобы контент не скрывался за шапкой.
Анимация параллакса Плавная прокрутка может комбинироваться с параллакс-эффектами, задаваемыми через CSS или JS, для более выразительного визуального эффекта.
Контроль доступности Smooth Scroll позволяет плавно прокручивать страницы без нарушения навигации с клавиатуры и скринридеров, при условии корректного использования семантических ссылок и заголовков.
Поддержка мобильных устройств Плавная прокрутка адаптируется под сенсорное управление, но при необходимости можно отключать анимацию для маленьких экранов или при высоких нагрузках.
Прокрутка к элементу с ID:
scroll.animateScroll(document.querySelector('#footer'));
Прокрутка к конкретной позиции страницы:
scroll.animateScroll(1000, { speed: 700 });
Отмена текущей прокрутки:
scroll.cancelScroll();
Эти методы обеспечивают полный контроль над процессом прокрутки и позволяют интегрировать Smooth Scroll в любые сценарии SPA или классической верстки.
Smooth Scroll объединяет функции плавной анимации, управления URL и интеграции с роутером. Основные преимущества:
Использование библиотеки позволяет создавать современные интерфейсы с удобной навигацией и визуально приятными переходами между секциями страницы.