Popper.js предоставляет мощный API для управления позиционированием всплывающих элементов относительно якорей. Для детальной отладки и понимания работы механизма позиционирования используется debug режим, который позволяет визуализировать границы поппера, якоря и отслеживать расчёты смещений.
import { createPopper } from '@popperjs/core';
// Пример базовой инициализации
const button = document.querySelector('#button');
const tooltip = document.querySelector('#tooltip');
const popperInstance = createPopper(button, tooltip, {
modifiers: [
{
name: 'debug',
enabled: true,
},
],
});
Ключевые моменты:
modifiers — массив модификаторов, который управляет
поведением поппера.debug — встроенный модификатор, предназначенный
исключительно для диагностики.enabled: true активирует визуальное отображение границ
элементов.При включенном debug режиме Popper.js добавляет на страницу контурные рамки для следующих элементов:
arrow.Рамки автоматически подсвечиваются различными цветами, что позволяет быстро определить ошибки позиционирования или неправильные смещения.
/* Для кастомизации визуализации debug */
.popper-debug {
border: 2px dashed red;
background-color: rgba(255, 0, 0, 0.1);
}
.reference-debug {
border: 2px dashed blue;
}
.arrow-debug {
border: 2px dashed green;
}
Debug режим особенно полезен при работе с дополнительными модификаторами:
const popperInstance = createPopper(button, tooltip, {
placement: 'bottom',
modifiers: [
{ name: 'offset', options: { offset: [0, 10] } },
{ name: 'flip', options: { fallbackPlacements: ['top', 'right', 'left'] } },
{ name: 'preventOverflow', options: { padding: 8 } },
{ name: 'debug', enabled: true },
],
});
Включение debug режима позволяет наблюдать, как каждый модификатор влияет на позиционирование поппера в реальном времени. Контуры помогают визуально оценить:
flip;Для более продвинутой отладки можно использовать callback функции модификаторов в сочетании с debug режимом:
const logModifier = {
name: 'log',
enabled: true,
phase: 'afterWrite',
fn({ state }) {
console.log('Popper state:', state);
},
};
const popperInstance = createPopper(button, tooltip, {
modifiers: [
{ name: 'debug', enabled: true },
logModifier,
],
});
Особенности:
phase: 'afterWrite' гарантирует, что логирование
происходит после применения всех изменений DOM.state содержит информацию о положении
popper, размерах, смещениях и активных модификаторах.debug и логирования даёт
полное представление о работе Popper.js в сложных интерфейсах..popper-debug, можно сделать контуры более заметными.Включение debug режима — это не просто инструмент визуализации, а полноценный инструмент анализа и диагностики, позволяющий детально отслеживать взаимодействие всех модификаторов и поведение попперов в реальном времени.