Shepherd.js предоставляет гибкую систему управления
позиционированием шагов пользовательских руководств.
Каждый шаг определяется объектом конфигурации, в котором ключевым
параметром является attachTo. Этот параметр задаёт элемент
DOM, к которому привязывается подсказка, и положение подсказки
относительно него.
Пример базовой конфигурации шага:
const tour = new Shepherd.Tour({
defaultStepOptions: {
scrollTo: true
}
});
tour.addStep({
id: 'example-step',
text: 'Это пример шага',
attachTo: {
element: '.button-example',
on: 'bottom'
}
});
В поле on можно указать позиции: top,
bottom, left, right, а также
комбинации вроде top-start, bottom-end. Это
позволяет детально контролировать точку привязки подсказки к
элементу.
Для точной настройки позиции шагов применяется параметр
offset, который задаёт смещение подсказки относительно
привязанного элемента. Он может быть числом или объектом с координатами
по осям x и y:
tour.addStep({
id: 'offset-step',
text: 'Шаг со смещением',
attachTo: {
element: '.button-example',
on: 'top'
},
popperOptions: {
modifiers: [
{
name: 'offset',
options: {
offset: [0, 10] // смещение 10px вниз
}
}
]
}
});
Использование popperOptions открывает доступ к полной
мощи библиотеки Popper.js, на которой строится
позиционирование Shepherd.js. Это позволяет реализовать сложные
сценарии: смещение относительно центра, динамическая корректировка при
изменении размеров окна и предотвращение выхода подсказки за границы
видимой области.
Shepherd.js поддерживает автоматическую корректировку позиции шага
при недостатке пространства на экране. Это достигается через модификатор
preventOverflow Popper.js, который по умолчанию
включен.
Пример настройки адаптивного шага:
tour.addStep({
id: 'adaptive-step',
text: 'Адаптивный шаг',
attachTo: {
element: '.menu-item',
on: 'right'
},
popperOptions: {
modifiers: [
{
name: 'preventOverflow',
options: {
boundary: 'viewport'
}
},
{
name: 'flip',
options: {
fallbackPlacements: ['left', 'bottom', 'top']
}
}
]
}
});
Модификатор flip автоматически меняет позицию подсказки
на одну из альтернативных, если первоначальное место не помещается. Это
обеспечивает корректное отображение на разных разрешениях экрана и при
изменении размеров элементов.
Для шагов, привязанных к элементам, находящимся вне видимой области,
Shepherd.js предоставляет опцию scrollTo. Она позволяет
автоматически прокручивать страницу к целевому элементу перед
отображением подсказки:
tour.addStep({
id: 'scroll-step',
text: 'Шаг с прокруткой',
attachTo: {
element: '.footer-link',
on: 'top'
},
scrollTo: { beh * avior: 'smooth', block: 'center' }
});
Параметры behavior и block управляют
анимацией прокрутки и позицией элемента в видимой области, что делает
взаимодействие с руководством более естественным.
По умолчанию Shepherd.js добавляет подсказки в body. Для
сложных макетов возможно указание кастомного
контейнера, чтобы контролировать наложение элементов, z-index и
позиционирование:
tour.addStep({
id: 'custom-container-step',
text: 'Шаг в пользовательском контейнере',
attachTo: {
element: '.sidebar-button',
on: 'right'
},
useModalOverlay: true,
modal: true,
classes: 'custom-tooltip',
popperOptions: {
strategy: 'fixed'
}
});
strategy: 'fixed' позволяет фиксировать подсказку
относительно окна, а не относительно документа, что критично для
динамически изменяемых панелей и модальных окон.
Позиция шага может быть изменена во время выполнения тура, что удобно
для адаптивного интерфейса или интерактивных элементов. Метод
updateStepOptions позволяет подставлять новые параметры
attachTo:
tour.getCurrentStep().updateStepOptions({
attachTo: {
element: '.new-element',
on: 'left'
}
});
Это позволяет подстраивать подсказки под изменения DOM без необходимости перезапуска тура.
Для элементов с динамическим содержимым (списки, таблицы, вкладки) рекомендуется использовать динамический поиск элемента через функцию, возвращающую актуальный DOM-узел:
tour.addStep({
id: 'dynamic-element-step',
text: 'Шаг для динамического элемента',
attachTo: {
element: () => document.querySelector('.dynamic-button'),
on: 'bottom'
}
});
Функция вызывается при отображении шага, что гарантирует корректную привязку даже после изменений структуры страницы.
flip и preventOverflow для
автоматической адаптации на разных разрешениях.offset для тонкой настройки положения и
предотвращения перекрытия соседних элементов.attachTo.element.fixed и кастомные контейнеры.Эти подходы позволяют создать профессионально выглядящие и надежные интерактивные руководства, полностью контролируя позицию и вид подсказок на любом интерфейсе.