Shepherd.js использует Popper.js для управления позиционированием тултипов и шагов интерактивных туров. Popper.js предоставляет мощный механизм, позволяющий контролировать поведение всплывающих элементов относительно целевых узлов DOM. Ключевым инструментом в этом является система модификаторов, которая расширяет стандартное поведение позиционирования и позволяет гибко настраивать внешний вид и расположение шагов.
Модификаторы — это объекты с набором свойств, которые описывают, как Popper.js должен корректировать положение поппера:
offset, preventOverflow,
flip.beforeRead, read,
afterRead, beforeMain, main,
afterMain, beforeWrite, write,
afterWrite).Shepherd.js передаёт эти модификаторы в Popper.js через конфигурацию
popperOptions каждого шага:
const tour = new Shepherd.Tour({
defaultStepOptions: {
popperOptions: {
modifiers: [
{ name: 'offset', options: { offset: [0, 10] } },
{ name: 'flip', options: { fallbackPlacements: ['top', 'bottom'] } }
]
}
}
});
offsetПозволяет смещать поппер относительно целевого элемента.
Синтаксис:
offset: [skidding, distance]
skidding — смещение по оси X (горизонтально).distance — смещение по оси Y (вертикально).Часто используется для того, чтобы шаг тура не перекрывал элементы интерфейса.
Пример с использованием Shepherd.js:
tour.addStep({
text: 'Пример смещения',
attachTo: { element: '.button', on: 'bottom' },
popperOptions: {
modifiers: [
{ name: 'offset', options: { offset: [0, 20] } }
]
}
});
preventOverflowГарантирует, что поппер не выйдет за пределы видимой области окна или заданного контейнера.
Параметры options:
boundary — DOM-элемент, относительно которого
проверяется переполнение (viewport по умолчанию).padding — минимальное расстояние от границ
контейнера.Пример:
modifiers: [
{ name: 'preventOverflow', options: { boundary: 'viewport', padding: 8 } }
]
flipПозволяет автоматически менять позицию шага, если основная сторона не помещается на экране.
Параметры options:
fallbackPlacements — массив альтернативных
позиций.padding — минимальное расстояние до границ экрана.Работает в связке с preventOverflow.
Пример:
modifiers: [
{ name: 'flip', options: { fallbackPlacements: ['top', 'left', 'right'], padding: 10 } }
]
arrowИспользуется для корректного позиционирования стрелки поппера.
Параметры options:
element — CSS-селектор или DOM-элемент стрелки.Shepherd.js автоматически добавляет стрелку к шагам с
arrow: true, но при кастомных стилях можно задавать элемент
вручную.
Пример:
modifiers: [
{ name: 'arrow', options: { element: '.shepherd-arrow' } }
]
computeStylesКонтролирует, как Popper.js вычисляет CSS-свойства
transform и top/left для позиционирования.
Параметры options:
gpuAcceleration — включение ускорения через GPU.adaptive — адаптивное позиционирование при изменении
размеров окна.Пример:
modifiers: [
{ name: 'computeStyles', options: { gpuAcceleration: true, adaptive: false } }
]
Каждый шаг тура может иметь собственные модификаторы Popper.js.
Настройка производится через popperOptions:
tour.addStep({
title: 'Пример шага с модификаторами',
text: 'Шаг с кастомными модификаторами Popper.js',
attachTo: { element: '.menu', on: 'right' },
popperOptions: {
modifiers: [
{ name: 'offset', options: { offset: [0, 15] } },
{ name: 'preventOverflow', options: { boundary: '.container', padding: 5 } },
{ name: 'flip', options: { fallbackPlacements: ['left', 'top'] } }
]
}
});
popperOptions можно задавать глобально через
defaultStepOptions для всего тура, либо индивидуально для
каждого шага.offset, затем
preventOverflow, затем flip, чтобы смещения
учитывались перед проверкой границ и переворотом.name,
enabled, phase и fn.offset + flip + arrow позволяют
точно настроить шаги даже в сложных макетах.preventOverflow и flip делают шаги
автоматически подстраиваемыми под размеры экрана и динамически
изменяющиеся элементы интерфейса.Модификаторы Popper.js в Shepherd.js дают полный контроль над поведением шагов тура: смещение, предотвращение выхода за границы, динамическое изменение позиции и точное позиционирование стрелок. Грамотная настройка этих инструментов позволяет создавать максимально удобные и визуально аккуратные интерактивные гиды.