Библиотека Tippy.js предоставляет гибкий и мощный инструмент для создания всплывающих подсказок и тултипов в веб-приложениях. Одним из ключевых аспектов её архитектуры является система хуков жизненного цикла, позволяющая реагировать на различные этапы существования тултипа: от инициализации до уничтожения.
Tippy.js реализует несколько встроенных хуков жизненного цикла, которые можно использовать при создании экземпляра тултипа:
onCreate(instance) Вызывается сразу после создания тултипа, но до его рендеринга в DOM. Применяется для выполнения начальной настройки, например, добавления кастомных классов или атрибутов к элементу тултипа.
onShow(instance) Срабатывает каждый раз перед показом тултипа. Можно использовать для динамической подгрузки содержимого, расчёта позиции или проверки условий отображения.
onShown(instance) Вызывается после полной анимации появления тултипа. Подходит для запуска логики, зависящей от фактического отображения элемента на странице, например, трекинга событий или анимации содержимого.
onHide(instance) Активируется до начала скрытия тултипа. Используется для выполнения действий перед исчезновением, таких как сохранение состояния или отмена таймеров.
onHidden(instance) Срабатывает после завершения анимации скрытия тултипа. Подходит для очистки динамически созданного контента, удаления слушателей событий и освобождения ресурсов.
onMount(instance) Запускается при монтировании тултипа в DOM. Идеально для интеграции с внешними библиотеками, например, для инициализации интерактивных элементов внутри тултипа.
onUntrigger(instance, event) Вызывается при
событии, которое должно скрыть тултип (например, mouseleave
или click). Позволяет контролировать условия скрытия и
предотвращать нежелательное исчезновение.
Контекст экземпляра Каждый хук получает ссылку
на объект тултипа instance, содержащий все его свойства и
методы, такие как show(), hide(),
setContent(), destroy(). Это обеспечивает
полный контроль над поведением тултипа на любом этапе его жизненного
цикла.
Асинхронность Хуки могут содержать асинхронный
код. Например, onShow может подгружать данные с сервера
перед отображением тултипа, а его показ будет выполнен после завершения
асинхронной операции.
Порядок срабатывания
onCreate → onMount → onShow →
onShown при показеonHide → onHidden →
onUntrigger при скрытии Это позволяет разделять логику и
корректно управлять состояниями тултипа.tippy('#button', {
content: 'Пример тултипа',
onCreate(instance) {
console.log('Создан тултип:', instance);
},
onShow(instance) {
instance.setContent('Обновлённое содержимое перед показом');
},
onHidden(instance) {
console.log('Тултип скрыт и готов к уничтожению');
}
});
В этом примере:
onCreate выводит сообщение о создании экземпляра.onShow обновляет содержимое тултипа перед его
отображением.onHidden фиксирует факт скрытия тултипа после
завершения анимации.Использование хуков жизненного цикла помогает эффективно управлять ресурсами:
onShow,
onHidden).onMount и onHidden.onMount, а их очистка — в onHidden.Помимо стандартных хуков, Tippy.js позволяет создавать
расширенные плагины с собственными событиями жизненного
цикла. Для этого используется опция plugins и методы типа
fn(instance) для реагирования на внутренние изменения
тултипа. Такой подход обеспечивает высокую гибкость при реализации
сложного поведения.
onCreate только для одноразовой
инициализации, чтобы не перегружать цикл отображения.onShow
или onMount, избегая лишнего пересчёта при каждом движении
курсора.onHidden, чтобы
избежать утечек памяти.Хуки жизненного цикла Tippy.js обеспечивают тонкий контроль над поведением тултипов, делают их динамическими и интегрируемыми с любыми компонентами веб-интерфейса, от простых кнопок до сложных модальных окон и интерактивных панелей.