Библиотека Tippy.js предоставляет удобный и гибкий механизм для создания всплывающих подсказок и тултипов. Одной из ключевых задач при работе с интерактивными подсказками является автоматическое закрытие тултипа, когда пользователь кликает вне его области. Это особенно важно для поддержания корректного пользовательского опыта и предотвращения «залипания» подсказок на странице.
interactiveПо умолчанию, Tippy.js закрывает тултип при клике вне его области, если он не является интерактивным. Если тултип должен содержать элементы управления (кнопки, ссылки, формы), его необходимо сделать интерактивным:
tippy('#myButton', {
content: 'Интерактивный тултип',
interactive: true,
});
interactive: true позволяет
пользователю взаимодействовать с содержимым тултипа, при этом Tippy.js
автоматически отслеживает клики вне области и скрывает тултип, когда это
необходимо.
Для более тонкой настройки используется опция trigger и
методы управления открытием/закрытием тултипа:
tippy('#myButton', {
content: 'Тултип с закрытием по клику вне',
interactive: true,
trigger: 'click', // тултип открывается по клику
hideOnClick: true // автоматически скрывается при клике вне
});
trigger: 'click' — тултип
открывается по клику на элемент.
hideOnClick: true — скрытие
происходит при клике вне области тултипа или на самом триггере.
Возможные значения hideOnClick:
true — закрытие при любом клике вне тултипа или на
триггере.'toggle' — закрытие только при повторном клике на
триггер.false — тултип не скрывается автоматически при
клике.tippy.hide()Для динамического управления закрытием тултипа можно использовать
метод hide() экземпляра:
const instance = tippy('#myButton', {
content: 'Динамическое закрытие',
interactive: true,
});
document.addEventListener('click', (event) => {
if (!instance.popper.contains(event.target) && !instance.reference.contains(event.target)) {
instance.hide();
}
});
В этом примере:
instance.popper) или на элементе-триггере
(instance.reference).hide(),
закрывая тултип.Если на странице несколько интерактивных подсказок, удобно использовать глобальное закрытие всех тултипов при клике вне:
document.addEventListener('click', (event) => {
tippy.hideAll({ duration: 200 }); // скрывает все тултипы с анимацией
});
Опция duration задаёт время анимации скрытия в
миллисекундах. Этот подход особенно полезен для страниц с множеством
всплывающих элементов.
Закрытие только при клике вне, но не на триггере
tippy('#myButton', {
content: 'Только вне тултипа',
interactive: true,
hideOnClick: false,
});
document.addEventListener('click', (event) => {
const instance = tippy.instances[0]; // или другой способ получения экземпляра
if (!instance.popper.contains(event.target)) {
instance.hide();
}
});Закрытие с задержкой Можно использовать
setTimeout или опцию delay для плавного
скрытия:
tippy('#myButton', {
content: 'С задержкой скрытие',
interactive: true,
delay: [0, 300], // 300ms задержка при скрытии
});Интеграция с библиотеками UI Tippy.js корректно
работает вместе с фреймворками вроде React,
Vue или Svelte, позволяя отслеживать
клики вне компонента и вызывать hide() в нужных жизненных
циклах.
interactive: true для тултипов с формами
или кнопками.hideOnClick в зависимости от сценария
взаимодействия.tippy.hideAll() для упрощения логики.Закрытие при клике вне области является ключевым элементом интерактивных подсказок и обеспечивает удобство взаимодействия пользователя с интерфейсом. Правильная комбинация опций Tippy.js позволяет создавать гибкие и управляемые всплывающие элементы.