Tippy.js позволяет создавать интерактивные всплывающие подсказки, которые могут появляться не только при наведении мыши, но и при фокусе на элементе. Это особенно важно для доступности, так как пользователи клавиатуры должны иметь возможность взаимодействовать с интерактивными элементами.
Для включения реакции на фокус необходимо использовать опцию
trigger. По умолчанию Tippy реагирует на событие
mouseenter, но для работы с фокусом следует добавить
focus:
tippy('#myButton', {
content: 'Подсказка при фокусе',
trigger: 'focus',
});
В данном примере всплывающая подсказка появляется, когда элемент с
id="myButton" получает фокус, и исчезает, когда фокус
покидает элемент.
Tippy.js поддерживает комбинирование нескольких событий, что позволяет подсказке работать одновременно при наведении и при фокусе:
tippy('#myInput', {
content: 'Введите данные',
trigger: 'mouseenter focus',
});
Важно учитывать, что перечисление событий через пробел позволяет Tippy корректно обрабатывать их независимо. Таким образом, пользователь может как навести мышь на элемент, так и использовать клавишу Tab для получения подсказки.
Подсказка автоматически скрывается, когда элемент теряет фокус, но
поведение можно детализировать через опцию hideOnClick и
метод blur. Например, если необходимо, чтобы подсказка
оставалась видимой до явного закрытия:
tippy('#myInput', {
content: 'Подсказка остаётся до закрытия',
trigger: 'focus',
interactive: true,
hideOnClick: false,
});
Использование interactive: true позволяет пользователю
взаимодействовать с содержимым подсказки (например, нажимать кнопки
внутри неё) без её немедленного закрытия при потере фокуса.
Tippy.js интегрируется с стандартными атрибутами ARIA для повышения доступности:
aria-haspopup="true" указывает на наличие всплывающей
подсказки.aria-expanded динамически изменяется библиотекой при
открытии и закрытии подсказки.aria-describedby связывает элемент с подсказкой,
улучшая взаимодействие с экранными читалками.Пример использования:
const button = document.querySelector('#accessibleButton');
tippy(button, {
content: 'Подсказка для доступности',
trigger: 'focus',
});
button.setAttribute('aria-haspopup', 'true');
Tippy предоставляет методы для явного управления открытием и закрытием подсказок через JavaScript. Это позволяет интегрировать подсказки с кастомной логикой фокуса:
const instance = tippy('#customFocus', {
content: 'Подсказка управляется программно',
trigger: 'manual',
});
document.querySelector('#customFocus').addEventListener('focus', () => {
instance.show();
});
document.querySelector('#customFocus').addEventListener('blur', () => {
instance.hide();
});
Использование trigger: 'manual' делает подсказку
полностью управляемой, что полезно для сложных интерфейсов, где фокус
перемещается между несколькими элементами.
Tippy.js поддерживает плавное появление и исчезновение подсказок при
фокусе с помощью опций animation и
duration:
tippy('#animatedFocus', {
content: 'Анимированная подсказка',
trigger: 'focus',
animation: 'scale',
duration: [300, 200], // [вход, выход]
});
Это обеспечивает визуальный комфорт и улучшает восприятие динамики интерфейса.
Если подсказка содержит интерактивные элементы, важно включить
interactive: true и следить за фокусом внутри:
tippy('#interactiveFocus', {
content: '<button>Кнопка внутри подсказки</button>',
allowHTML: true,
interactive: true,
trigger: 'focus',
});
Это предотвращает закрытие подсказки при переходе фокуса внутри её содержимого, сохраняя интерактивность.
Tippy.js корректно работает с клавишами навигации, такими как
Tab и Shift+Tab, при условии правильного
использования триггера focus и интерактивного режима. Можно
дополнительно отслеживать нажатия клавиш для кастомного поведения:
document.querySelector('#keyboardFocus').addEventListener('keydown', (e) => {
if (e.key === 'Escape') {
tippy('#keyboardFocus').hide();
}
});
Это позволяет обеспечить быстрый доступ к закрытию подсказки без использования мыши.
Фокус в Tippy.js — ключевой инструмент для доступности и удобства
клавиатурной навигации. Грамотное использование триггеров
focus, опций interactive,
trigger: 'manual', а также интеграция с ARIA-атрибутами
позволяет создавать гибкие, безопасные и отзывчивые подсказки, которые
корректно работают как с мышью, так и с клавиатурой.