Shepherd.js предоставляет гибкую систему управления расположением всплывающих подсказок относительно целевых элементов на странице. Центральными понятиями здесь являются отступы (padding) и смещения (offset), которые позволяют точно настраивать позиционирование подсказки для обеспечения удобного визуального восприятия.
Отступы определяют минимальное расстояние между подсказкой и
границами экрана или окна просмотра. Это предотвращает ситуацию, когда
подсказка выходит за видимую область страницы. В Shepherd.js отступы
задаются через параметр padding внутри опций
позиционирования.
Пример использования:
const tour = new Shepherd.Tour({
defaults: {
classes: 'shepherd-theme-arrows',
scrollTo: true,
}
});
tour.addStep({
id: 'example-step',
text: 'Пример подсказки с отступами',
attachTo: {
element: '#myButton',
on: 'bottom'
},
popperOptions: {
modifiers: [
{
name: 'preventOverflow',
options: {
padding: 20
}
}
]
}
});
tour.start();
В данном примере используется модификатор
preventOverflow, который предотвращает выход подсказки за
границы окна. Параметр padding задаёт внутренний
отступ, влияющий на расчёт позиции подсказки.
Особенности:
padding может быть числом (одинаковое для всех
сторон) или объектом с отдельными значениями для каждой стороны:padding: { top: 10, bottom: 15, left: 20, right: 20 }
popperOptions.Смещение позволяет сдвигать подсказку относительно её базовой позиции. В отличие от отступов, которые ограничивают подсказку рамками окна, смещения управляют точкой, где подсказка появляется относительно элемента.
Пример настройки смещения:
tour.addStep({
id: 'offset-step',
text: 'Подсказка с индивидуальным смещением',
attachTo: {
element: '#myButton',
on: 'top'
},
popperOptions: {
modifiers: [
{
name: 'offset',
options: {
offset: [0, 15] // [смещение по горизонтали, смещение по вертикали]
}
}
]
}
});
Объяснение:
offset отвечает за
горизонтальное смещение (x), второе — за вертикальное (y).attachTo.on — направление
базовой позиции подсказки сохраняется, но добавляется указанный
сдвиг.Для идеального позиционирования часто применяют одновременно и
padding, и offset. Например, при наведении на
кнопку в правом верхнем углу экрана:
tour.addStep({
id: 'combined-step',
text: 'Комбинация отступов и смещения',
attachTo: {
element: '#cornerButton',
on: 'right'
},
popperOptions: {
modifiers: [
{
name: 'preventOverflow',
options: { padding: { top: 10, bottom: 10, left: 5, right: 5 } }
},
{
name: 'offset',
options: { offset: [10, 20] }
}
]
}
});
Здесь:
preventOverflow с padding гарантирует, что
подсказка не уйдёт за экран.offset сдвигает подсказку вправо на 10px и вниз на 20px
относительно базовой позиции right.scrollTo: при
автоматической прокрутке к элементу стоит учитывать смещения, иначе
подсказка может оказаться слишком близко к краю.padding в
preventOverflow.top, bottom, left,
right).Использование popperOptions с модификаторами
preventOverflow и offset является стандартной
практикой для продвинутой настройки всех шагов туров в Shepherd.js.