В библиотеке Shepherd.js опция scrollToHandler
предназначена для управления поведением прокрутки страницы во время
показа шагов тура. Она позволяет полностью кастомизировать способ,
которым элемент, к которому привязан шаг, становится видимым в области
просмотра пользователя. Это особенно важно для сложных интерфейсов с
динамически подгружаемым контентом или фиксированными шапками, которые
могут перекрывать целевой элемент.
scrollToHandlerОпция scrollToHandler принимает
функцию, которая вызывается каждый раз, когда Shepherd
пытается прокрутить страницу к целевому элементу шага:
scrollToHandler: function (targetElement) {
// Логика прокрутки
}
targetElement — DOM-элемент, к которому привязан
текущий шаг тура.scrollIntoView, window.scrollTo
или сторонние анимации через библиотеки типа GSAP.Если scrollToHandler не задан,
Shepherd.js применяет встроенный метод прокрутки:
scrollIntoView({ beh * avior: 'smooth', block: 'center' }).scrollToHandler: function (targetElement) {
const headerOffset = 100; // Высота шапки
const elementPosition = targetElement.getBoundingClientRect().top;
const offsetPosition = elementPosition + window.pageYOffset - headerOffset;
window.scrollTo({
top: offsetPosition,
beh * avior: "smooth"
});
}
В этом примере элемент прокручивается так, чтобы его верхняя граница находилась под шапкой.
scrollToHandler: function (targetElement) {
gsap.to(window, { duration: 1, scrollTo: targetElement });
}
Использование GSAP позволяет более гибко управлять плавностью и динамикой прокрутки, включая временные задержки и сложные кривые движения.
scrollToHandler: function (targetElement) {
const rect = targetElement.getBoundingClientRect();
if (rect.top < 0 || rect.bottom > window.innerHeight) {
targetElement.scrollIntoView({ beh * avior: "smooth", block: "center" });
}
}
Функция проверяет видимость элемента и прокручивает страницу только если элемент частично или полностью вне видимой области.
При использовании динамических компонентов (например, вкладок, модальных окон, ленивой загрузки контента) часто требуется:
scrollToHandler: async function (targetElement) {
await new Promise(resolve => setTimeout(resolve, 300)); // Ждем рендер
targetElement.scrollIntoView({ beh * avior: "smooth", block: "center" });
}
Это предотвращает ситуации, когда Shepherd прокручивает к элементу, который ещё не отрендерен на странице.
scrollToHandler может использоваться для совместимости
с любыми кастомными скроллерами, включая виртуальные списки и контейнеры
с overflow.scrollToHandler с опциями
attachTo и advanceOn для синхронизации показа
шага с событиями интерфейса.scrollToОпция scrollTo в Shepherd.js ограничена базовой
прокруткой с дефолтными параметрами. scrollToHandler
предоставляет полный контроль над поведением, включая
динамическое вычисление позиций, анимации и интеграцию с внешними
библиотеками.
scrollToHandler — это функция для кастомного управления
прокруткой к целевому элементу шага.