Tippy.js предоставляет гибкий API для создания всплывающих подсказок
(tooltip) через программный вызов, что позволяет
динамически управлять их поведением без привязки к HTML-атрибутам
data-tippy-content.
import tippy from 'tippy.js';
import 'tippy.js/dist/tippy.css';
Базовый способ программного создания подсказки выглядит следующим образом:
const button = document.querySelector('#myButton');
const tip = tippy(button, {
content: 'Привет, я подсказка!',
placement: 'top', // положение относительно элемента
arrow: true, // отображение стрелки
animation: 'scale', // анимация появления
});
Ключевые моменты:
content – текст или HTML, который будет отображаться
внутри тултипа.placement – допустимые значения: 'top',
'bottom', 'left', 'right' и их
варианты с -start / -end.arrow – включает/отключает стрелку.animation – контролирует эффект появления
(fade, scale, shift-away и
другие).Tippy.js позволяет создать подсказки для коллекций элементов:
const buttons = document.querySelectorAll('.info-btn');
tippy(buttons, {
content: 'Общая подсказка для всех кнопок',
delay: [100, 200], // задержка появления и скрытия в мс
theme: 'light', // тема подсказки
});
Особенности:
Созданный тултип возвращает объект с методами управления:
const tipInstance = tippy(button, { content: 'Управляемая подсказка' })[0];
tipInstance.show(); // показать подсказку
tipInstance.hide(); // скрыть подсказку
tipInstance.toggle(); // переключение видимости
tipInstance.setContent('Новый текст'); // обновление контента
tipInstance.destroy(); // удаление тултипа
Методы, на которые стоит обратить внимание:
show() и hide() – управляют
видимостью.toggle() – переключает состояние.setContent(content) – позволяет менять содержимое на
лету.destroy() – полностью удаляет тултип и освобождает
ресурсы.createSingletonДля группировки нескольких подсказок в один экземпляр с общей логикой:
const tips = tippy('.btn', {
content: 'Кнопка',
trigger: 'mouseenter focus',
});
const singleton = tippy.createSingleton(tips, {
delay: 200,
moveTransition: 'transform 0.2s ease-out',
});
Особенности:
Tippy.js позволяет привязывать подсказку к виртуальному элементу, который не существует в DOM:
const virtualReference = {
getBoundingClientRect: () => ({
width: 100,
height: 50,
top: 200,
bottom: 250,
left: 300,
right: 400,
}),
clientWidth: 100,
clientHeight: 50,
};
tippy(virtualReference, {
content: 'Подсказка для виртуального объекта',
trigger: 'manual',
placement: 'right',
}).show();
Применение виртуальных элементов удобно для:
Tippy.js поддерживает хуки событий, которые можно привязать при создании:
tippy(button, {
content: 'События',
onShow(instance) {
console.log('Подсказка показана', instance);
},
onHide(instance) {
console.log('Подсказка скрыта', instance);
},
onMount(instance) {
console.log('Подсказка смонтирована в DOM', instance.popper);
},
});
Доступные события:
onShow / onShownonHide / onHiddenonMount / onUntriggeronTrigger / onUntriggerЭти события дают полный контроль над жизненным циклом подсказки и позволяют выполнять динамическую логику при её показе или скрытии.
Программный вызов позволяет использовать функции для генерации контента:
tippy(button, {
content: () => `Сейчас: ${new Date().toLocaleTimeString()}`,
allowHTML: false,
interactive: false,
});
Особенности:
allowHTML: true позволяет вставлять HTML-код, но
требует осторожности с безопасностью.С помощью параметров offset и popperOptions
можно тонко настраивать расположение:
tippy(button, {
content: 'Смещение подсказки',
placement: 'bottom',
offset: [0, 20], // смещение по X и Y
popperOptions: {
modifiers: [
{
name: 'flip',
options: { fallbackPlacements: ['top', 'right'] },
},
],
},
});
offset задаёт смещение от стандартной позиции.popperOptions.modifiers позволяет использовать мощь
библиотеки Popper.js для адаптивного позиционирования.Эти механизмы программного вызова обеспечивают максимальную гибкость Tippy.js, позволяя динамически создавать, настраивать и управлять подсказками в любых сценариях интерфейса.