В библиотеке Tippy.js хук onMount
позволяет выполнить пользовательский код в момент появления тултипа на
странице. Это особенно полезно для динамического управления содержимым,
запуска анимаций, или интеграции с другими библиотеками после того, как
тултип полностью отрендерен и вставлен в DOM.
tippy(target, {
content: 'Пример тултипа',
onMount(instance) {
// код выполняется при монтировании тултипа
}
});
target — селектор, элемент DOM или
массив элементов, к которым привязывается тултип.instance — объект тултипа,
предоставляющий полный доступ к его API.instanceПри вызове onMount хук получает инстанс
тултипа, содержащий ключевые методы и свойства:
instance.popper — DOM-элемент тултипа (корневой
контейнер).instance.state — объект состояния тултипа
(открыт/закрыт, анимация, placement).instance.setContent(newContent) — метод для
динамической замены контента.instance.show() / instance.hide() — методы
управления видимостью.instance.destroy() — удаляет тултип полностью.Использование этих свойств позволяет выполнять любые манипуляции сразу после монтирования.
tippy('#button', {
content: 'Динамический тултип',
onMount(instance) {
instance.popper.style.transition = 'transform 0.3s ease, opacity 0.3s ease';
instance.popper.style.transform = 'scale(0.8)';
instance.popper.style.opacity = '0';
requestAnimationFrame(() => {
instance.popper.style.transform = 'scale(1)';
instance.popper.style.opacity = '1';
});
}
});
В данном примере при появлении тултипа применяется плавное увеличение масштаба и появление с прозрачностью, что создаёт эффект «выезжающего» тултипа.
onMount удобно использовать для загрузки данных перед
отображением содержимого. Например, запрос к API:
tippy('#user', {
content: 'Загрузка...',
onMount(instance) {
fetch('https://api.example.com/user-info')
.then(res => res.json())
.then(data => {
instance.setContent(`Имя: ${data.name}<br>Email: ${data.email}`);
})
.catch(() => {
instance.setContent('Не удалось загрузить данные');
});
}
});
Такой подход позволяет показывать предварительный текст «Загрузка…», а затем заменять его на реальные данные без закрытия тултипа.
При интеграции с React, Vue или Svelte onMount
обеспечивает безопасное взаимодействие с DOM после того, как тултип
создан. Пример с React:
import tippy from 'tippy.js';
import 'tippy.js/dist/tippy.css';
import MyComponent from './MyComponent';
const button = document.querySelector('#react-button');
tippy(button, {
content: '',
onMount(instance) {
const container = document.createElement('div');
instance.popper.appendChild(container);
ReactDOM.render(<MyComponent />, container);
}
});
Это позволяет рендерить React-компоненты внутри тултипа только после его монтирования, избегая ошибок и конфликтов с виртуальным DOM.
onMount и другими хукамиonShow — вызывается перед анимацией
появления тултипа, но до полной вставки в DOM.onMount — вызывается
после того, как тултип полностью смонтирован и доступен
в DOM.onHidden — срабатывает после скрытия
тултипа.Использование onMount предпочтительно, когда требуется
прямой доступ к DOM для анимаций, динамического контента или интеграции
с библиотеками визуализации.
instance.popper для манипуляций с
DOM, а не document.querySelector, чтобы избежать
конфликтов при нескольких тултипах.setContent для
динамического обновления текста или компонентов.tippy('.item', {
content: 'Информация загружается...',
interactive: true,
onMount(instance) {
instance.popper.classList.add('custom-mount-animation');
fetch(`https://api.example.com/item/${instance.reference.dataset.id}`)
.then(res => res.json())
.then(data => {
instance.setContent(`<strong>${data.title}</strong><p>${data.description}</p>`);
});
}
});
В этом примере:
interactive: true), что позволяет
кликать внутри него.Использование onMount делает работу с Tippy.js гибкой,
обеспечивая полное управление тултипами в момент их появления и открывая
возможности для интеграции с динамическим контентом, анимациями и
компонентными библиотеками.