Tippy.js предоставляет мощный механизм для кастомизации поведения тултипов через хуки (hooks). Понимание контекста их выполнения позволяет создавать сложные интерактивные элементы с точным управлением жизненным циклом тултипа.
В Tippy.js есть несколько категорий хуков:
onCreate — вызывается один раз при
создании экземпляра тултипа. Контекст выполнения:
this указывает на текущий экземпляр тултипа
(tippy instance).reference, popper,
state, props.onShow — срабатывает перед
отображением тултипа. Контекст:
this указывает на экземпляр тултипа.instance.state содержит текущее состояние
(isVisible, isMounted).false в
onShow.onMount — вызывается после того,
как тултип полностью смонтирован в DOM. Контекст:
this — экземпляр тултипа.instance.popper.onHidden — срабатывает после
скрытия тултипа. Контекст:
this указывает на экземпляр тултипа.onDestroy — вызывается при
уничтожении тултипа. Контекст:
this.state доступны все свойства тултипа перед
удалением.this всегда ссылается на экземпляр
тултипа, что позволяет обращаться к его методам и состоянию без
необходимости захватывать переменные из внешней области.const tip = tippy('#btn', {
content: 'Пример',
onShow(instance) {
console.log(this === instance); // true
},
});
Каждый хук предоставляет доступ к объекту state и
props:
state.isVisible — видимость тултипа.state.isMounted — смонтирован ли тултип в DOM.state.interactive — поддержка интерактивного
контента.props.content — текущий контент тултипа.props.placement — позиция относительно целевого
элемента.Пример динамической модификации контента через контекст:
tippy('#btn', {
content: 'Начальный текст',
onShow(instance) {
if (!instance.state.customized) {
instance.setContent('Обновлённый текст');
instance.state.customized = true;
}
},
});
Методы экземпляра доступны через контекст:
instance.show() — отображение тултипа.instance.hide() — скрытие.instance.setContent(newContent) — динамическое
изменение контента.instance.destroy() — удаление тултипа.Использование внутри хуков позволяет создавать сложные сценарии:
tippy('#btn', {
content: 'Нажми меня',
onMount(instance) {
setTimeout(() => instance.hide(), 2000); // автоматическое скрытие через 2 секунды
},
});
onHidden или
onDestroy.instance.state для отслеживания состояния между
хуками.instance.popper выполняются в onMount, чтобы
быть уверенным, что элемент уже в DOM.tippy('#btn', {
content: 'Интерактивный тултип',
interactive: true,
onShow(instance) {
instance.setContent(`Сейчас: ${new Date().toLocaleTimeString()}`);
},
onMount(instance) {
instance.popper.style.border = '2px solid #4CAF50';
},
onHidden(instance) {
console.log('Тултип скрыт');
},
});
В этом примере каждый хук использует свой контекст для управления поведением тултипа: динамический контент, стили и логирование.
Контекст выполнения хуков Tippy.js обеспечивает полный контроль над жизненным циклом тултипа и позволяет создавать динамические, интерактивные элементы, управляя состоянием, DOM и поведением через экземпляр тултипа.