Shepherd.js предоставляет возможность автоматически прокручивать страницу к целевому элементу при запуске шага. Это особенно важно для интерфейсов с длинными страницами, динамически загружаемыми элементами или сложными формами, где пользователь может не видеть нужный элемент без скролла.
scrollToКаждый шаг Shepherd.js может быть сконфигурирован с параметром
scrollTo. Этот параметр управляет поведением прокрутки к
элементу, на который указывает шаг. Его можно использовать двумя
способами:
Булевое значение
const tour = new Shepherd.Tour({
defaultStepOptions: {
scrollTo: true
}
});
tour.addStep({
id: 'step-1',
text: 'Это первый шаг.',
attachTo: { element: '#first-element', on: 'bottom' }
});
tour.start();
При значении true Shepherd автоматически прокрутит
страницу так, чтобы целевой элемент оказался видимым, используя
стандартный метод scrollIntoView().
Объект конфигурации Можно задать дополнительные параметры для более гибкой прокрутки:
tour.addStep({
id: 'step-2',
text: 'Пример прокрутки с настройками.',
attachTo: { element: '#second-element', on: 'top' },
scrollTo: { beh * avior: 'smooth', block: 'center', inline: 'nearest' }
});
Здесь используется объект с опциями, аналогичными стандартному методу
Element.scrollIntoView(). Пояснения
параметров:
behavior — определяет анимацию прокрутки:
'auto' или 'smooth'.block — вертикальное выравнивание элемента:
'start', 'center', 'end',
'nearest'.inline — горизонтальное выравнивание:
'start', 'center', 'end',
'nearest'.Если элемент появляется на странице после загрузки или при
взаимодействии пользователя, важно убедиться, что шаг активируется
только после того, как элемент доступен в DOM. Для этого можно
использовать when и show события:
tour.addStep({
id: 'dynamic-step',
text: 'Элемент появился динамически.',
attachTo: { element: '#dynamic-element', on: 'right' },
scrollTo: true,
when: {
show: () => {
const elem = document.querySelector('#dynamic-element');
if (!elem) {
console.warn('Элемент ещё не доступен');
}
}
}
});
Использование scrollTo совместно с проверкой наличия
элемента позволяет избежать ошибок и обеспечивать плавную прокрутку даже
в динамических интерфейсах.
Иногда нужно оставить небольшой отступ от верхней или нижней границы окна, чтобы элемент не оказался вплотную к краю экрана. Shepherd.js позволяет использовать кастомную функцию для управления прокруткой:
tour.addStep({
id: 'offset-step',
text: 'Прокрутка с отступом сверху.',
attachTo: { element: '#offset-element', on: 'top' },
scrollTo: () => {
const element = document.querySelector('#offset-element');
const offset = 100; // пикселей
window.scrollTo({
top: element.getBoundingClientRect().top + window.scrollY - offset,
beh * avior: 'smooth'
});
}
});
Использование функции для scrollTo позволяет реализовать
любые нестандартные сценарии прокрутки, включая сложные вычисления
позиции или адаптацию под фиксированные шапки.
Shepherd.js автоматически обрабатывает скролл с базовой анимацией, но при необходимости можно подключить сторонние библиотеки анимации или собственные методы:
tour.addStep({
id: 'animated-scroll',
text: 'Прокрутка с кастомной анимацией.',
attachTo: { element: '#animated-element', on: 'left' },
scrollTo: () => {
const element = document.querySelector('#animated-element');
const top = element.getBoundingClientRect().top + window.scrollY;
// Используем библиотеку GSAP для плавного скролла
gsap.to(window, { scrollTo: top, duration: 1 });
}
});
Такой подход позволяет интегрировать Shepherd.js с современными библиотеками анимаций и создавать визуально привлекательные интерактивные туры.
beh * avior: 'smooth' для
плавного пользовательского опыта.scrollTo дают
полный контроль над поведением прокрутки и позволяют комбинировать её с
любыми визуальными эффектами.Автоматическая прокрутка в Shepherd.js является мощным инструментом для создания удобных и интуитивных интерактивных туров, обеспечивая, чтобы пользователь всегда видел нужный элемент на экране в момент показа шага.