Tippy.js предоставляет гибкий способ управления всплывающими
подсказками и их поведением относительно фокуса и навигации с
клавиатуры. Основным элементом контроля является параметр
trigger, который определяет, каким событием будет
активироваться тултип. Для фокусируемых элементов (например, кнопок или
ссылок) рекомендуется использовать trigger: 'focus'. В этом
случае тултип автоматически открывается при получении элементом фокуса и
закрывается при его потере.
tippy('#myButton', {
content: 'Подсказка при фокусе',
trigger: 'focus',
});
Использование focus вместо mouseenter
обеспечивает доступность для пользователей, которые используют
клавиатуру для навигации.
Для поддержки навигации с клавиатуры Tippy.js интегрируется с
атрибутами ARIA. При создании тултипа автоматически добавляются атрибуты
aria-describedby на элемент-источник, связывая его с
подсказкой. Это позволяет скринридерам корректно озвучивать содержимое
подсказки.
tippy('#inputField', {
content: 'Введите ваше имя',
trigger: 'focus',
});
В сочетании с библиотекой Popper.js, Tippy.js гарантирует, что подсказка корректно позиционируется даже при навигации с клавиатуры, что предотвращает её обрезание на экране.
Помимо автоматических событий, тултипы могут управляться вручную с
помощью методов show(), hide() и
toggle(). Это полезно для сложных форм или динамических
интерфейсов, где поведение фокуса зависит от состояния приложения.
const instance = tippy('#myInput', {
content: 'Обязательное поле',
trigger: 'manual',
});
document.querySelector('#myInput').addEventListener('focus', () => instance.show());
document.querySelector('#myInput').addEventListener('blur', () => instance.hide());
Использование trigger: 'manual' полностью снимает
стандартное управление и позволяет программно синхронизировать тултип с
любым событием.
Tippy.js поддерживает интерактивные тултипы через параметр
interactive: true. Это позволяет элементам внутри подсказки
получать фокус, например, кнопкам или ссылкам. В комбинации с
trigger: 'focus' интерактивность делает возможным работу с
подсказками как с мини-диалогами.
tippy('#infoIcon', {
content: '<button>Нажми меня</button>',
allowHTML: true,
interactive: true,
trigger: 'focus',
});
При этом тултип не закроется при перемещении фокуса внутрь содержимого, а закроется только после потери фокуса всеми интерактивными элементами.
Для сложных интерфейсов с множеством подсказок важно управлять
порядком навигации. В HTML-коде следует корректно расставлять атрибуты
tabindex, чтобы последовательность фокуса соответствовала
логике приложения. Tippy.js не вмешивается в порядок табуляции, но
поддерживает корректное отображение тултипов при навигации клавишей Tab
или Shift+Tab.
<button id="btn1" tabindex="1">Кнопка 1</button>
<button id="btn2" tabindex="2">Кнопка 2</button>
tippy('#btn1, #btn2', {
content: 'Подсказка',
trigger: 'focus',
});
Параметры delay позволяют установить отдельные интервалы
для открытия и закрытия тултипа. Для элементов с фокусом это важно,
чтобы избежать резких всплытий при случайном кратковременном фокусе.
tippy('#emailInput', {
content: 'Введите email',
trigger: 'focus',
delay: [100, 300], // открытие через 100ms, закрытие через 300ms
});
По умолчанию, тултип с trigger: 'focus' закрывается при
потере фокуса. Для сложных случаев можно комбинировать
interactive: true и слушать события onHide или
onShow, чтобы реализовать кастомные сценарии, например,
проверку состояния формы перед закрытием подсказки.
tippy('#username', {
content: 'Имя пользователя должно быть уникальным',
trigger: 'focus',
interactive: true,
onHide(instance) {
console.log('Тултип закрыт');
},
});
Эти возможности делают Tippy.js мощным инструментом для создания доступных, управляемых и интерактивных подсказок с полной поддержкой фокуса и навигации клавиатурой.