Метод createPopper является центральной функцией
библиотеки Popper.js. Он отвечает за создание поппера —
плавающего элемента, позиционируемого относительно другого элемента (так
называемого reference element). Метод обеспечивает
динамическое вычисление положения и позволяет корректно управлять
позиционированием с учетом размеров окна, скролла и границ видимой
области.
Синтаксис метода выглядит следующим образом:
const popperInstance = createPopper(reference, popper, options);
reference — DOM-элемент, относительно
которого позиционируется поппер.popper — сам плавающий элемент
(DOM-элемент), который будет отображаться.options — объект с настройками,
управляющий поведением и стратегией позиционирования.createPopperОпции делятся на несколько ключевых категорий:
placement, strategy)placement — определяет основное
положение поппера относительно reference. Возможные значения:top, bottom, left, right
top-start, top-end, bottom-start, bottom-end, left-start, left-end, right-start, right-end
Например, bottom-start размещает поппер под элементом, с
выравниванием по левому краю.
strategy — способ позиционирования,
принимает значения:absolute | fixed
absolute учитывает ближайший позиционированный предок,
fixed фиксирует элемент относительно окна просмотра.
const popperInstance = createPopper(button, tooltip, {
placement: 'top',
strategy: 'absolute'
});
modifiers)Модификаторы — это объекты, которые позволяют расширять функциональность Popper.js, изменяя или настраивая поведение поппера. Каждый модификатор имеет структуру:
{
name: 'название',
enabled: true, // включение/отключение модификатора
options: { /* параметры */ },
phase: 'phase' // optional, на какой фазе выполнять
}
Наиболее часто используемые модификаторы:
offset — смещение поппера относительно
reference:modifiers: [{
name: 'offset',
options: {
offset: [0, 10] // [сколько по горизонтали, сколько по вертикали]
}
}]
flip — автоматический перенос поппера
на противоположную сторону при недостатке места:modifiers: [{
name: 'flip',
options: {
fallbackPlacements: ['top', 'right', 'bottom', 'left']
}
}]
preventOverflow — предотвращает выход
поппера за пределы видимой области:modifiers: [{
name: 'preventOverflow',
options: {
boundary: 'viewport', // ограничения по окну
padding: 8 // минимальное расстояние до границ
}
}]
arrow — управляет позиционированием
стрелки поппера, если она есть:modifiers: [{
name: 'arrow',
options: {
element: arrowElement, // DOM-элемент стрелки
padding: 5
}
}]
После создания экземпляра через createPopper доступны
следующие методы:
update() — пересчитывает положение
поппера и применяет изменения. Возвращает промис.destroy() — полностью удаляет
popperInstance, отключает все слушатели.setOptions(options) — позволяет
изменить параметры и модификаторы динамически.forceUpdate() — синхронное обновление
позиции без промиса.Пример использования методов:
// динамическое изменение позиции
popperInstance.setOptions({
placement: 'bottom-end'
});
// пересчет позиции после изменения DOM
popperInstance.update();
// удаление поппера
popperInstance.destroy();
Каждый модификатор может быть выполнен на определенной фазе жизненного цикла Popper.js:
beforeRead — до чтения размеров и
положения.read — получение размеров
элементов.afterRead — после чтения
размеров.beforeMain — перед основной
обработкой.main — основная логика
модификатора.afterMain — после основной
обработки.beforeWrite — перед записью изменений
в DOM.write — непосредственное изменение
DOM.afterWrite — финальная фаза.Фазы позволяют управлять последовательностью выполнения модификаторов и гарантировать корректное позиционирование.
const popperInstance = createPopper(referenceElement, tooltipElement, {
placement: 'bottom',
strategy: 'fixed',
modifiers: [
{ name: 'offset', options: { offset: [0, 12] } },
{ name: 'flip', options: { fallbackPlacements: ['top', 'right'] } },
{ name: 'preventOverflow', options: { padding: 5, boundary: 'viewport' } },
{ name: 'arrow', options: { element: arrowElement, padding: 5 } }
]
});
В этом примере поппер будет:
bottom) с отступом 12px.createPopperupdate().arrow) позиционируется автоматически,
если правильно указан модификатор arrow, и учитывает любые
смещения или ограничения.Метод createPopper обеспечивает полный контроль над
позиционированием плавающих элементов, позволяя создавать сложные
интерактивные интерфейсы без необходимости вручную рассчитывать
координаты и управлять DOM-изменениями.