Tippy.js позволяет создавать гибко настраиваемые всплывающие подсказки (tooltips) и поповеры в веб-приложениях на JavaScript. Основным инструментом для управления поведением подсказок является объект конфигурации, передаваемый при инициализации.
tippy(targets, {
content: 'Текст подсказки',
placement: 'top',
animation: 'fade',
theme: 'light',
});
top, bottom, left,
right, а также комбинации типа
top-start).fade, scale, shift-away и
другие).Каждый из этих параметров можно изменять динамически, используя
методы экземпляра Tippy.js, например setProps.
Иногда требуется менять поведение подсказки в зависимости от состояния приложения или размера экрана. Для таких случаев Tippy.js позволяет задавать конфигурацию условно с помощью функций и объектных структур.
content может быть функцией, возвращающей текст или HTML
в зависимости от условий:
tippy('.btn', {
content: (reference) => {
return window.innerWidth < 768 ? 'Короткая подсказка' : 'Подсказка с более длинным описанием';
},
});
Здесь подсказка автоматически изменяет текст в зависимости от ширины окна. Это особенно полезно для адаптивного дизайна.
Положение подсказки может зависеть от положения элемента на странице:
tippy('.item', {
placement: (reference) => {
const rect = reference.getBoundingClientRect();
return rect.top < 100 ? 'bottom' : 'top';
},
});
Таким образом, подсказка корректно отображается даже на верхней границе экрана.
Можно комбинировать темы и анимации, чтобы подсказка визуально соответствовала контексту:
tippy('.notification', {
theme: (reference) => reference.classList.contains('error') ? 'error' : 'info',
animation: (reference) => reference.classList.contains('important') ? 'scale' : 'fade',
});
Подсказка меняет стиль и анимацию в зависимости от класса целевого элемента.
[появление, скрытие] или
числом для обеих фаз.[появление, скрытие].tippy('.info', {
delay: [100, 300],
duration: [200, 500],
});
Управляет событиями, которые вызывают показ подсказки:
mouseenter, focus, click,
manualtrigger: 'mouseenter focus'Позволяет делать подсказку интерактивной, чтобы пользователь мог взаимодействовать с контентом:
tippy('.dropdown', {
interactive: true,
});
Tippy.js допускает создание подсказок только при выполнении определённых условий:
document.querySelectorAll('.feature').forEach(el => {
if (el.dataset.tooltipEnabled === 'true') {
tippy(el, { content: el.dataset.tooltipText });
}
});
Такой подход экономит ресурсы и позволяет управлять большим количеством элементов на странице.
setProps(props) — обновляет свойства подсказки.enable() / disable() — включает или
отключает подсказку.destroy() — удаляет подсказку полностью.Пример динамического изменения текста:
const tip = tippy('.btn', { content: 'Старый текст' });
tip.setProps({ content: 'Новый текст' });
Для адаптивной конфигурации удобно использовать медиазапросы Jav * aScript:
const isMobile = window.matchMedia('(max-width: 768px)').matches;
tippy('.btn', {
content: isMobile ? 'Мобильная подсказка' : 'Полная подсказка',
placement: isMobile ? 'bottom' : 'top',
});
Это позволяет создавать единый код для всех устройств без дублирования логики.
Tippy.js предоставляет несколько событий для управления жизненным циклом:
Пример условного изменения стиля при показе:
tippy('.alert', {
content: 'Важная информация',
onShow(instance) {
if (instance.reference.classList.contains('urgent')) {
instance.setProps({ theme: 'error' });
}
},
});
Эта функциональность позволяет создавать сложное поведение, меняющееся в зависимости от состояния приложения или внешних факторов.