Многошаговые формы часто требуют плавной навигации между отдельными шагами. В этом контексте библиотека Smooth Scroll обеспечивает удобный способ программно прокручивать страницу к нужному разделу, создавая впечатление динамичного и отзывчивого интерфейса. Основной принцип работы заключается в том, чтобы использовать ссылки или элементы управления для прокрутки к целевому контейнеру с плавной анимацией.
Для начала необходимо подключить библиотеку. В современном фронтенде чаще всего используют NPM:
import SmoothScroll from 'smooth-scroll';
const scroll = new SmoothScroll('a[href*="#"]', {
speed: 600,
speedAsDuration: true,
offset: 20,
easing: 'easeInOutCubic',
});
Ключевые параметры:
speed — время анимации в миллисекундах.speedAsDuration — если true, скорость не зависит от
расстояния.offset — смещение от верхнего края окна браузера.
Полезно, если есть фиксированная шапка.easing — тип функции плавности анимации. Поддерживаются
стандартные кривые easeInOutCubic, linear,
easeInQuad и другие.Многошаговые формы обычно реализуются как отдельные контейнеры:
<div id="step1" class="form-step">...</div>
<div id="step2" class="form-step">...</div>
<div id="step3" class="form-step">...</div>
<nav class="form-navigation">
<a href="#step1">Шаг 1</a>
<a href="#step2">Шаг 2</a>
<a href="#step3">Шаг 3</a>
</nav>
Smooth Scroll автоматически перехватывает клики по ссылкам и анимирует переход:
const scroll = new SmoothScroll('.form-navigation a', {
speed: 500,
offset: 50,
});
Для более сложной логики, например, при валидации шага формы перед
переходом, можно использовать метод animateScroll:
const nextStep = document.querySelector('#step2');
scroll.animateScroll(nextStep, null, {
speed: 700,
offset: 40,
easing: 'easeOutQuad',
});
Параметры метода:
target — элемент или его селектор, к которому нужно
прокрутиться.anchor — необязательный элемент-ссылка, используется
для расчета offset.options — объект с настройками скорости, смещения и
функции easing.Если шаги формы создаются или отображаются динамически через JavaScript, необходимо обновлять ссылки Smooth Scroll:
scroll.destroy();
scroll = new SmoothScroll('.form-navigation a', { speed: 600 });
Метод destroy удаляет все обработчики событий, после
чего библиотеку можно заново инициализировать на новом наборе
элементов.
На мобильных устройствах важно учитывать высоту клавиатуры и
возможные фиксированные шапки. Для этого используют динамический
offset:
function getDynamicOffset() {
return window.innerWidth < 768 ? 100 : 50;
}
const scroll = new SmoothScroll('.form-navigation a', {
speed: 500,
offset: getDynamicOffset(),
});
Smooth Scroll позволяет отслеживать начало и конец анимации, что удобно для управления состоянием формы:
scroll.on('start', function (event, anchor, toggle) {
console.log('Начало прокрутки к шагу', anchor);
});
scroll.on('complete', function (event, anchor) {
console.log('Прокрутка завершена на шаге', anchor);
});
Эти события полезны для запуска анимаций элементов внутри шага или активации дополнительных проверок.
Часто требуется не просто прокрутка, а условный переход к следующему шагу:
const nextButton = document.querySelector('#nextStep');
nextButton.addEventListener('click', (e) => {
e.preventDefault();
if (validateCurrentStep()) {
scroll.animateScroll(document.querySelector('#step2'));
} else {
highlightErrors();
}
});
Такой подход обеспечивает интерактивность и контроль над процессом, предотвращая переход без корректного заполнения текущего шага.
animateScroll при последовательных переходах.offset
только при необходимости.id.id.animateScroll
для динамических шагов.start и complete для контроля
анимации.Smooth Scroll обеспечивает плавное, предсказуемое и настраиваемое перемещение между шагами формы, повышая удобство использования и визуальную привлекательность интерфейса.