Popper.js предоставляет мощный механизм для управления поведением всплывающих элементов и их позиционирования относительно целевых элементов на странице. Одним из ключевых аспектов является управление слушателями событий, которые обеспечивают динамическое обновление положения и реакции поппера на действия пользователя и изменения в DOM.
Popper.js использует слушатели событий для отслеживания изменений, влияющих на позицию всплывающего элемента. Основные сценарии включают:
resize)scroll)MutationObserver)Эти события позволяют поддерживать точное положение поппера без необходимости ручного пересчёта координат.
При инициализации Popper.js слушатели добавляются автоматически, если используется стандартная конфигурация:
import { createPopper } from '@popperjs/core';
const button = document.querySelector('#button');
const tooltip = document.querySelector('#tooltip');
const popperInstance = createPopper(button, tooltip, {
modifiers: [
{
name: 'eventListeners',
enabled: true,
},
],
});
Здесь модификатор eventListeners управляет включением и
отключением отслеживания событий. По умолчанию он активирован, что
позволяет Popper.js автоматически реагировать на скролл и изменение
размеров окна.
Popper.js предоставляет API для ручного управления
слушателями событий через методы setOptions,
update и destroy.
popperInstance.setOptions({
modifiers: [
{
name: 'eventListeners',
enabled: false,
},
],
});
popperInstance.setOptions({
modifiers: [
{
name: 'eventListeners',
enabled: true,
},
],
});
Popper.js позволяет настраивать поведение слушателей через модификаторы, включая:
modifiers: [
{
name: 'eventListeners',
enabled: true,
options: {
scroll: document.querySelector('#scroll-container')
}
}
]
modifiers: [
{
name: 'eventListeners',
enabled: true,
options: {
resize: false
}
}
]
requestAnimationFrame или внешних
дебаунс-функций.flip или
preventOverflow, зависят от актуальных координат, которые
обновляются через слушатели событий. Отключение слушателей может
привести к некорректной работе этих модификаторов.update: Даже при
отключённых слушателях можно вручную вызвать пересчёт позиции поппера
через метод update:popperInstance.update();
Это полезно, если изменения происходят программно и не отслеживаются стандартными слушателями.
setOptions позволяет динамически
управлять слушателями в зависимости от состояния интерфейса,
например при скрытии модального окна.Popper.js строит систему слушателей событий с использованием:
resize события окна для пересчёта
позиции при изменении размеров окна.scroll событий на всех родительских элементах
целевого элемента для отслеживания прокрутки.Эта комбинация обеспечивает точное позиционирование поппера в любых условиях, включая сложные интерфейсы с вложенной прокруткой и динамическим контентом.
Хотите, я могу подготовить раздел с примером оптимизации слушателей событий для больших страниц и модальных окон, где подробно показать, как уменьшить нагрузку на браузер и ускорить Popper.js?