Shepherd.js использует Popper.js для позиционирования тултипов и шагов интерактивного руководства на странице. Это позволяет точно размещать подсказки относительно элементов DOM, поддерживать динамическое изменение позиции при прокрутке страницы и изменении размеров окна. Понимание взаимодействия Shepherd.js и Popper.js важно для создания гибких и отзывчивых пользовательских интерфейсов.
Shepherd.js автоматически интегрируется с Popper.js через свой пакет, если используется версия, включающая Popper. Для явного подключения можно использовать отдельный импорт:
import Shepherd from 'shepherd.js';
import { createPopper } from '@popperjs/core';
В этом случае Popper.js используется для расчета положения каждого шага относительно целевого элемента, обеспечивая:
offset.flip).Каждый шаг Shepherd.js принимает объект attachTo, где
можно указать целевой элемент и направление подсказки. Пример:
const tour = new Shepherd.Tour({
defaultStepOptions: {
classes: 'shepherd-theme-arrows',
scrollTo: true
}
});
tour.addStep({
id: 'step-1',
text: 'Это подсказка к кнопке.',
attachTo: {
element: '#myButton',
on: 'bottom'
},
buttons: [
{
text: 'Далее',
action: tour.next
}
]
});
tour.start();
Ключевой момент — опция on, которая напрямую
взаимодействует с Popper.js, задавая предпочтительное направление
подсказки. Popper.js автоматически корректирует позицию при ограниченном
пространстве.
popperOptionsShepherd.js позволяет передавать дополнительные параметры Popper.js
через popperOptions:
tour.addStep({
id: 'step-2',
text: 'Подсказка с настройками Popper.js.',
attachTo: { element: '#inputField', on: 'right' },
popperOptions: {
modifiers: [
{
name: 'offset',
options: { offset: [0, 10] }
},
{
name: 'preventOverflow',
options: { padding: 8 }
}
]
}
});
Основные возможности popperOptions:
Popper.js автоматически отслеживает изменения в DOM и пересчитывает
позицию шагов. Для ручного обновления можно вызвать метод
update() у шага:
const step = tour.addStep({
id: 'dynamic-step',
text: 'Динамическая подсказка',
attachTo: { element: '#dynamicElement', on: 'top' }
});
step.show();
// После изменения размеров элемента или окна
step.popperInstance.update();
popperInstance — это внутренний объект Popper.js,
создаваемый Shepherd.js для управления позицией текущей подсказки.
Popper.js позволяет автоматически подстраивать подсказки под размеры
экрана. В Shepherd.js это реализуется через комбинацию опций
flip и preventOverflow:
popperOptions: {
modifiers: [
{ name: 'flip', options: { fallbackPlacements: ['top', 'right', 'bottom', 'left'] } },
{ name: 'preventOverflow', options: { padding: 10 } }
]
}
Для сложных интерфейсов можно создавать собственные экземпляры
Popper.js и передавать их в Shepherd.js через опцию
popperOptions.modifiers. Например, для позиционирования
относительно родительского контейнера с фиксированной высотой:
popperOptions: {
modifiers: [
{
name: 'computeStyles',
options: { gpuAcceleration: false }
},
{
name: 'preventOverflow',
options: { boundary: '#parentContainer' }
}
]
}
Это позволяет обеспечить точное позиционирование подсказки, независимо от структуры DOM и стилей элементов страницы.
attachTo для базового позиционирования
шагов.popperOptions.flip и preventOverflow для
адаптивных интерфейсов.popperInstance.update() для корректного
позиционирования.Shepherd.js и Popper.js совместно обеспечивают мощный и гибкий механизм позиционирования шагов, позволяющий строить интерактивные и адаптивные пользовательские руководства в любых веб-приложениях.