Shepherd.js предоставляет гибкие возможности управления прокруткой страницы во время шагов руководства. Корректная настройка прокрутки критически важна для создания плавного и логичного пользовательского опыта, особенно при работе с длинными страницами или динамическим контентом.
В Shepherd.js контроль над прокруткой осуществляется через свойства,
определяемые для шагов (step). Основные опции:
scrollTo – определяет элемент или координаты, к
которым будет происходить прокрутка. Может быть задан как строковый
селектор CSS, DOM-элемент, объект с координатами {x, y} или
функция, возвращающая любой из этих типов.
scrollToHandler – функция, которая полностью
контролирует процесс прокрутки. При вызове получает целевой элемент и
параметры шага. Это позволяет реализовать кастомные анимации или
использовать сторонние библиотеки прокрутки, например GSAP
или ScrollMagic.
scrollToOptions – объект с настройками поведения
прокрутки, который передаётся внутрь стандартной функции прокрутки
scrollIntoView. Основные поля:
behavior – 'auto' или
'smooth' (по умолчанию 'smooth'), определяет
тип анимации.block – 'start', 'center',
'end', 'nearest'; задаёт вертикальное
выравнивание элемента после прокрутки.inline – 'start', 'center',
'end', 'nearest'; задаёт горизонтальное
выравнивание.Пример стандартной настройки прокрутки:
const tour = new Shepherd.Tour({
defaultStepOptions: {
scrollTo: { beh * avior: 'smooth', block: 'center' }
}
});
tour.addStep({
title: 'Пример шага',
text: 'Этот шаг прокручивается к центру экрана.',
attachTo: { element: '#feature', on: 'bottom' }
});
Если содержимое страницы загружается асинхронно или размер элементов
изменяется во время анимации, стандартная прокрутка может быть
недостаточной. В таких случаях используется
scrollToHandler:
tour.addStep({
title: 'Асинхронный элемент',
text: 'Прокрутка с учётом динамического контента.',
attachTo: { element: '#dynamic', on: 'top' },
scrollToHandler: (target) => {
// Использование кастомной анимации через GSAP
gsap.to(window, {
scrollTo: { y: target, offsetY: 50 },
duration: 1
});
}
});
Здесь offsetY позволяет смещать прокрутку на заданное
количество пикселей, что полезно для фиксированных заголовков или
панелей навигации.
В некоторых случаях необходимо запретить автоматическую прокрутку для
конкретного шага. Для этого scrollTo можно установить в
false:
tour.addStep({
title: 'Без прокрутки',
text: 'Этот шаг не изменяет позицию экрана.',
attachTo: { element: '#no-scroll', on: 'right' },
scrollTo: false
});
Это полезно, если элемент уже полностью видим пользователю или при создании модальных всплывающих подсказок, не требующих изменения позиции страницы.
Shepherd.js корректно работает с CSS-переходами и анимациями элементов. Для плавной интеграции рекомендуется задерживать вызов прокрутки до завершения анимации контента:
tour.addStep({
title: 'Анимация элемента',
text: 'Пример с задержкой прокрутки после анимации.',
attachTo: { element: '#animated', on: 'top' },
scrollToHandler: (target) => {
setTimeout(() => {
target.scrollIntoView({ beh * avior: 'smooth', block: 'center' });
}, 300); // задержка на 300 мс для завершения анимации
}
});
Хотя основное внимание уделяется вертикальной прокрутке, Shepherd.js
поддерживает и горизонтальную. Для этого используется параметр
inline внутри scrollToOptions:
tour.addStep({
title: 'Горизонтальная прокрутка',
text: 'Шаг с прокруткой по горизонтали.',
attachTo: { element: '#horizontal', on: 'bottom' },
scrollTo: {
beh * avior: 'smooth',
block: 'center',
inline: 'center'
}
});
Это особенно актуально для интерфейсов с горизонтальными каруселями или панелями.
scrollToHandler.Настройка поведения прокрутки в Shepherd.js позволяет детально управлять пользовательским опытом, делая туры интуитивными, предсказуемыми и эстетически приятными. Применение комбинаций стандартных опций и кастомных обработчиков обеспечивает универсальность для любых интерфейсных сценариев.