Для работы с Popper.js первым шагом является создание экземпляра
через конструктор
Popper.createPopper(reference, popper, options). Здесь:
Пример создания:
const popperInstance = Popper.createPopper(referenceElement, popperElement, {
placement: 'bottom',
modifiers: [
{ name: 'offset', options: { offset: [0, 8] } }
],
});
Ключевой момент: экземпляр Popper хранит внутреннее состояние и отвечает за динамическое управление позицией всплывающего элемента.
update()Метод update() пересчитывает позицию Popper относительно
reference. Возвращает Promise, который выполняется
после завершения обновления позиции.
popperInstance.update().then(() => {
console.log('Позиция Popper обновлена');
});
setOptions(options)Позволяет обновлять конфигурацию существующего экземпляра без пересоздания.
popperInstance.setOptions({
placement: 'top',
modifiers: [
{ name: 'flip', options: { fallbackPlacements: ['right', 'left'] } }
]
}).then(() => {
console.log('Опции Popper обновлены');
});
placement, modifiers и другие
настройки.setOptions() Popper автоматически
обновляет позицию.destroy()Метод destroy() полностью удаляет экземпляр Popper и
снимает все слушатели событий.
popperInstance.destroy();
destroy() объект экземпляра больше нельзя
использовать.forceUpdate()Метод forceUpdate() синхронно пересчитывает и применяет
новую позицию Popper.
popperInstance.forceUpdate();
update(), работает сразу,
без Promise.Асинхронность vs Синхронность
update() и setOptions() возвращают Promise
— позиция рассчитывается после завершения всех модификаторов.forceUpdate() выполняется мгновенно, что полезно при
срочных обновлениях.Модификаторы и их влияние Любые изменения в
модификаторах через setOptions() влияют на поведение Popper
при следующем обновлении. Например, включение flip изменяет
стратегию позиционирования при нехватке места.
Совместимость с динамическим DOM Методы
экземпляра автоматически учитывают перемещение или изменение размеров
reference и popper, если задействованы соответствующие модификаторы
(preventOverflow, flip,
offset).
Управление жизненным циклом
createPopper()update() / forceUpdate()setOptions()destroy()Это позволяет гибко интегрировать Popper в любые интерфейсы, поддерживая корректное позиционирование и экономию ресурсов.
const popperInstance = Popper.createPopper(referenceElement, popperElement, {
placement: 'bottom',
modifiers: [{ name: 'offset', options: { offset: [0, 10] } }]
});
// Изменение позиции по событию
button.addEventListener('click', () => {
popperInstance.setOptions({ placement: 'top' }).then(() => {
console.log('Popper перемещен наверх');
});
});
// Немедленное обновление при изменении размеров окна
window.addEventListener('resize', () => {
popperInstance.forceUpdate();
});
// Очистка после закрытия модального окна
closeButton.addEventListener('click', () => {
popperInstance.destroy();
});
Использование методов экземпляра Popper.js обеспечивает полное управление поведением всплывающих элементов и позволяет создавать интерфейсы с динамическим позиционированием, минимизируя ручное вмешательство и обеспечивая стабильность отображения.