Shepherd.js использует библиотеку Popper.js для
управления позиционированием подсказок. Каждый шаг тура
(Shepherd.Step) позволяет настраивать своё расположение,
смещение и поведение через объект popperOptions. Этот
объект предоставляет полный контроль над тем, как подсказка появляется
относительно целевого элемента и как реагирует на изменения в DOM.
popperOptionspopperOptions является объектом, который передаётся в
каждый шаг тура и соответствует API Popper.js:
const tour = new Shepherd.Tour({
defaultStepOptions: {
popperOptions: {
modifiers: [],
strategy: 'absolute',
}
}
});
Ключевые поля:
'absolute' или 'fixed'.'top', 'bottom', 'left',
'right', 'auto' и их вариации
('-start', '-end').modifiers)Модификаторы управляют конкретными аспектами позиционирования и поведения подсказки:
popperOptions: {
modifiers: [
{
name: 'offset',
options: {
offset: [0, 10] // [по горизонтали, по вертикали]
}
}
]
}
popperOptions: {
modifiers: [
{
name: 'preventOverflow',
options: {
padding: 8 // отступ от границ окна
}
}
]
}
padding задаёт минимальное расстояние от границ.popperOptions: {
modifiers: [
{
name: 'flip',
options: {
fallbackPlacements: ['top', 'bottom', 'right'] // последовательность альтернативных позиций
}
}
]
}
fallbackPlacements.popperOptions: {
modifiers: [
{
name: 'arrow',
options: {
element: '.shepherd-arrow', // селектор стрелки
padding: 5 // расстояние от края подсказки
}
}
]
}
.shepherd-arrow.absolute — позиция подсказки
рассчитывается относительно ближайшего предка с
position: relative.fixed — позиция фиксирована
относительно окна, игнорируя прокрутку. Используется для подсказок,
которые должны оставаться на экране при скролле.popperOptions: {
strategy: 'fixed'
}
const tour = new Shepherd.Tour({
defaultStepOptions: {
popperOptions: {
placement: 'bottom-start',
strategy: 'fixed',
modifiers: [
{
name: 'offset',
options: { offset: [0, 15] }
},
{
name: 'flip',
options: { fallbackPlacements: ['top', 'right', 'left'] }
},
{
name: 'preventOverflow',
options: { padding: 10 }
},
{
name: 'arrow',
options: { element: '.shepherd-arrow', padding: 5 }
}
]
}
}
});
tour.addStep({
title: 'Пример шага',
text: 'Подсказка с кастомным позиционированием и стрелкой',
attachTo: { element: '#target', on: 'bottom' }
});
tour.start();
placement задаёт первоначальное расположение.strategy: 'fixed' позволяет подсказке оставаться на
месте при прокрутке страницы.popperOptionspopperOptions может быть настроен отдельно для каждого
шага:
tour.addStep({
title: 'Другой шаг',
text: 'С другой позицией и смещением',
attachTo: { element: '#another-target', on: 'right' },
popperOptions: {
modifiers: [
{ name: 'offset', options: { offset: [10, 20] } },
{ name: 'flip', options: { fallbackPlacements: ['left', 'top'] } }
]
}
});
strategy: 'fixed'.Эти настройки делают подсказки Shepherd.js гибкими и адаптивными, позволяя создавать интуитивные и аккуратно выстроенные туры по интерфейсу.