Tippy.js — это современная библиотека для создания всплывающих подсказок (tooltips) в JavaScript, построенная поверх Popper.js. Она предоставляет гибкие возможности для кастомизации, позиционирования и анимации всплывающих элементов.
Создание простого тултипа осуществляется через функцию
tippy():
tippy('#myButton', {
content: 'Это подсказка',
});
#myButton — селектор DOM-элемента, к которому
привязывается тултип.content — текст или HTML, отображаемый внутри
тултипа.Tippy.js автоматически управляет позиционированием и скрытием тултипа при наведении, фокусе или клике, в зависимости от настроек.
Библиотека позволяет точно контролировать позицию всплывающего окна с
помощью опций placement и offset:
tippy('#myButton', {
content: 'Подсказка справа',
placement: 'right',
offset: [0, 10], // [skidding, distance]
});
top, bottom,
left, right и их вариации с
-start и -end.skidding) и по вертикали
(distance).Можно комбинировать разные настройки для адаптивного позиционирования, чтобы тултип не выходил за границы окна.
Tippy.js поддерживает несколько встроенных анимаций и позволяет создавать свои:
tippy('#myButton', {
content: 'Анимированная подсказка',
animation: 'scale',
duration: [300, 250], // [show, hide] в миллисекундах
});
animation может принимать значения: fade,
scale, shift-away,
shift-toward.duration — время появления и скрытия тултипа.Для полного контроля над стилями можно использовать CSS-классы через
опцию theme:
tippy('#myButton', {
content: 'Подсказка с темой',
theme: 'custom-theme',
});
.tippy-box[data-theme~='custom-theme'] {
background-color: #333;
color: #fff;
border-radius: 4px;
padding: 8px 12px;
}
Tippy.js позволяет вставлять сложный HTML-контент и делать тултипы интерактивными:
tippy('#myButton', {
content: document.querySelector('#tooltipContent'),
allowHTML: true,
interactive: true,
});
Это особенно полезно для форм, кнопок или всплывающих меню внутри тултипа.
Каскадные обновления — это механизм, позволяющий динамически менять
содержимое, позицию и другие свойства тултипов после их создания,
сохраняя интерактивность и плавность работы. Tippy.js поддерживает метод
setContent и обновление настроек через
setProps:
const instance = tippy('#myButton', {
content: 'Начальное содержимое',
});
instance.setContent('Обновлённое содержимое');
placement,
theme или interactive:instance.setProps({
placement: 'bottom',
theme: 'dark',
});
Каскадные обновления особенно эффективны при работе с большим количеством тултипов, когда содержимое зависит от состояния приложения или пользовательских действий.
Tippy.js поддерживает делегирование событий, что позволяет создавать тултипы для элементов, которых изначально нет в DOM:
tippy.delegate(document.body, {
target: '.dynamic-button',
content: 'Динамическая подсказка',
});
target, даже если они
добавлены позже.setContent на каждой новой кнопке.Tippy.js предоставляет гибкую систему событий, что позволяет контролировать жизненный цикл тултипа:
instance = tippy('#myButton', {
content: 'События тултипа',
onShow(instance) {
console.log('Тултип показывается', instance);
},
onHide(instance) {
console.log('Тултип скрывается', instance);
},
onMount(instance) {
console.log('Тултип смонтирован в DOM');
},
});
Эти события полезны для реализации каскадных обновлений и синхронизации тултипов с другими частями интерфейса.
При работе с множеством тултипов рекомендуется:
setProps и
setContent для изменения свойств без уничтожения
тултипа.instance.popperInstance.update() при изменении размера или
положения целевого элемента.Это минимизирует количество пересозданий DOM и обеспечивает плавную работу интерфейса даже при динамическом контенте.
Tippy.js позволяет группировать тултипы, синхронизируя их поведение:
const group = tippy.group([tippy('#btn1'), tippy('#btn2')], {
delay: [100, 200], // задержка появления/скрытия
});
Каскадные обновления в Tippy.js обеспечивают гибкость и динамичность
интерфейсов. Использование методов setContent,
setProps, событий и делегирования позволяет создавать
сложные, интерактивные подсказки, которые легко адаптируются под
изменения данных или действий пользователя. Поддержка HTML, анимаций и
кастомных тем делает библиотеку универсальным инструментом для
современных веб-приложений.