Параметр scrollTo отвечает за управление прокруткой
страницы во время показа шагов тура. Он обеспечивает автоматическое
перемещение окна браузера к элементу, на который указывает шаг, что
особенно важно при длинных страницах с большим количеством контента.
Shepherd.js использует этот параметр для плавного скролла, гарантируя,
что пользователь всегда видит активный шаг без необходимости вручную
прокручивать страницу.
scrollToБулевое значение (true /
false)
true — шаг автоматически скроллится к целевому
элементу. Если элемент уже виден, скролл может быть минимальным или
отсутствовать.false — прокрутка отключена. Элемент может быть вне
видимой области экрана, и пользователь должен прокрутить страницу
вручную.Объект конфигурации Shepherd.js позволяет передавать объект, который контролирует детали прокрутки. Основные свойства объекта:
behavior — тип анимации скролла ('auto'
или 'smooth').block — вертикальное позиционирование элемента в окне
('start', 'center', 'end',
'nearest').inline — горизонтальное позиционирование
('start', 'center', 'end',
'nearest').Пример использования объекта:
const tour = new Shepherd.Tour({
defaultStepOptions: {
scrollTo: {
beh * avior: 'smooth',
block: 'center',
inline: 'nearest'
},
cancelIcon: {
enabled: true
},
classes: 'custom-tour-step',
}
});
tour.addStep({
id: 'step-1',
text: 'Это пример шага с прокруткой.',
attachTo: {
element: '#element1',
on: 'bottom'
}
});
В этом примере шаг будет плавно прокручиваться к элементу
#element1 и располагаться по центру видимой области.
scrollTo'smooth'
делает переход более естественным для пользователя.scrollTo корректно работает, если шаг добавляется после
появления элемента.attachTo Прокрутка всегда
ориентирована на элемент, указанный в attachTo.element.
Если элемента нет или он скрыт, прокрутка может не сработать.
advanceOn Если шаг автоматически
продвигается после события, scrollTo гарантирует, что
элемент будет виден перед срабатыванием события.
beforeShowPromise Можно
использовать для ожидания асинхронной загрузки контента перед
выполнением скролла, чтобы избежать некорректного
позиционирования.
tour.addStep({
id: 'step-async',
text: 'Шаг с асинхронным элементом.',
attachTo: { element: '#asyncElement', on: 'top' },
beforeShowPromise: () => fetchData().then(() => console.log('Данные загружены')),
scrollTo: { beh * avior: 'smooth', block: 'start' }
});
block: 'center', чтобы элемент располагался в центре окна и
оставался видимым.'smooth' прокрутка делает
взаимодействие более комфортным.scrollTo: false для повторных шагов, чтобы не создавать
лишних анимаций.overflow: auto) нужно указывать правильный родительский
контейнер, так как scrollTo по умолчанию работает
относительно окна браузера.Прокрутка внутри контейнера с ограниченной высотой:
tour.addStep({
id: 'step-scroll-container',
text: 'Шаг внутри контейнера.',
attachTo: { element: '#scrollContainer .target', on: 'right' },
scrollTo: { beh * avior: 'smooth', block: 'nearest' }
});
В этом случае scrollTo корректно работает внутри
контейнера с прокруткой, не трогая всю страницу.
Отключение прокрутки для фиксированных элементов:
tour.addStep({
id: 'step-fixed',
text: 'Фиксированный элемент на экране.',
attachTo: { element: '#fixedHeader', on: 'bottom' },
scrollTo: false
});
Это предотвращает ненужное смещение страницы для элементов, которые всегда видимы.
Использование scrollTo позволяет управлять вниманием
пользователя, улучшает восприятие тура и делает интерфейс более плавным
и предсказуемым. Правильная настройка прокрутки особенно важна для
страниц с большим количеством контента или динамически изменяющимися
элементами.