createPopper — это основная функция библиотеки
Popper.js, используемая для создания поппера, то есть
элемента интерфейса, который позиционируется относительно другого
элемента (reference). Она возвращает объект поппера, предоставляющий API
для управления положением, обновления и уничтожения поппера.
import { createPopper } from '@popperjs/core';
const reference = document.querySelector('#button');
const popper = document.querySelector('#tooltip');
const popperInstance = createPopper(reference, popper, {
placement: 'top',
});
Параметры createPopper:
placement, modifiers и
strategy.placementplacement определяет позицию поппера относительно
reference. Возможные значения:
'top', 'bottom',
'left', 'right''top-start',
'top-end', 'bottom-start',
'bottom-end'Пример:
createPopper(reference, popper, {
placement: 'bottom-end',
});
Особенности:
placement может быть динамическим, управляемым через
модификатор flip.Модификаторы позволяют управлять поведением поппера: смещением, адаптацией под viewport, добавлением стрелок и т.д.
Структура модификатора:
{
name: 'offset',
options: {
offset: [0, 8], // горизонтальное и вертикальное смещение
},
}
Наиболее часто используемые модификаторы:
absolute или fixed) и
стилями transform.Пример комбинированных модификаторов:
createPopper(reference, popper, {
placement: 'top',
modifiers: [
{
name: 'offset',
options: { offset: [0, 10] },
},
{
name: 'flip',
options: { fallbackPlacements: ['bottom', 'right'] },
},
{
name: 'arrow',
options: { element: document.querySelector('#arrow') },
},
],
});
Popper.js поддерживает две стратегии позиционирования:
position: relative/absolute.createPopper(reference, popper, {
strategy: 'fixed',
});
createPopper возвращает объект с API для управления
поппером:
Пример динамического обновления:
popperInstance.update();
Popper.js позволяет использовать объекты вместо реальных
DOM-элементов. Такой объект должен иметь свойства
getBoundingClientRect() и contextElement. Это
полезно, когда нужно позиционировать поппер относительно координат
курсора или canvas-элемента.
const virtualReference = {
getBoundingClientRect: () => ({
width: 0,
height: 0,
top: 100,
bottom: 100,
left: 200,
right: 200,
}),
contextElement: document.body,
};
createPopper(virtualReference, popper);
Поппер можно динамически менять:
placement через setOptions:popperInstance.setOptions({
placement: 'right-start',
});
popperInstance.setOptions({
modifiers: [{ name: 'offset', options: { offset: [0, 20] } }],
});
popperInstance.destroy();
modifiers: [{ name: 'eventListeners', enabled: false }] для
временного отключения слежения за scroll/resize.strategy: 'fixed' для элементов в модальных
окнах и фиксированных контейнерах.Эти возможности делают createPopper гибким инструментом
для любых задач по позиционированию элементов в веб-интерфейсах,
обеспечивая точность, адаптивность и контроль над поведением
попперов.