Tippy.js предоставляет мощный и гибкий API для создания всплывающих
подсказок, который поддерживает не только классические события мыши
(mouseenter, mouseleave, click),
но и сенсорные устройства. Взаимодействие с
touch-устройствами требует особого подхода, так как
стандартные события мыши и сенсора могут конфликтовать.
В Tippy.js сенсорные события обрабатываются через следующие механизмы:
touchstart – срабатывает при первом
контакте пальца с экраном.touchend – фиксирует окончание
касания.pointerenter /
pointerleave – универсальные события, которые
могут заменять классические mouseenter и
mouseleave на устройствах с сенсором.click – часто используется для
эмуляции взаимодействия на touch-устройствах, поскольку касание может
считаться кликом.Tippy.js автоматически детектирует сенсорные устройства и применяет поведение, оптимизированное для touch, но его можно гибко настраивать через опции.
touch и управление поведением подсказкиTippy.js предоставляет параметр touch,
который позволяет управлять временем реакции подсказки на касания:
tippy('.btn', {
content: 'Пример подсказки',
touch: ['hold', 500] // Подсказка появится при удержании 500 мс
});
hold – подсказка появляется только при
длительном касании.500 – задержка в миллисекундах перед
отображением.Использование задержки важно, чтобы избежать случайного открытия подсказок при быстром скролле или обычных касаниях.
interactive на сенсорных устройствахЕсли подсказка интерактивная (имеет кнопки, ссылки или формы), нужно
учитывать особенность touch-устройств: палец перекрывает контент. Опция
interactive: true позволяет подсказке
оставаться открытой при касании её области:
tippy('.btn', {
content: '<button>Нажми меня</button>',
allowHTML: true,
interactive: true,
trigger: 'click'
});
При этом триггер click часто
предпочтительнее, чем mouseenter, поскольку на сенсорных
устройствах hover невозможен.
На сенсорных устройствах может возникать ситуация, когда один элемент
получает несколько одновременных касаний. Для этого Tippy.js
поддерживает maxTouchPoints, чтобы
контролировать отображение подсказок:
tippy('.btn', {
content: 'Только для одиночного касания',
maxTouchPoints: 1
});
Если устройство регистрирует более одного касания, подсказка не отображается, предотвращая наложение нескольких тултипов.
hideOnClick и touchHoldДля сенсорных устройств полезно комбинировать опции:
hideOnClick: true – скрывает подсказку
после первого касания или клика вне элемента.touchHold: true – позволяет удерживать
палец для появления подсказки.Пример:
tippy('.btn', {
content: 'Держите, чтобы увидеть подсказку',
touchHold: true,
hideOnClick: true
});
Это создает поведение, максимально близкое к привычным десктопным hover-эффектам, но адаптированное под сенсорные устройства.
onTrigger и onUntriggerДля более сложных сценариев можно использовать колбэки:
tippy('.btn', {
content: 'Подсказка с логикой touch',
onTrigger(instance, event) {
if(event.type === 'touchstart') {
console.log('Начало касания');
}
},
onUntrigger(instance, event) {
if(event.type === 'touchend') {
console.log('Конец касания');
}
}
});
Эти колбэки позволяют полностью контролировать жизненный цикл тултипа при взаимодействии с touch-устройствами.
На мобильных устройствах быстрый скролл может случайно активировать подсказку. Для предотвращения этого:
touchHold с
задержкой.maxTouchPoints.interactive: true только там, где это
необходимо.pointerEvents CSS для предотвращения нежелательных
срабатываний.| Опция | Назначение |
|---|---|
touch |
Управление появлением подсказки при касании |
touchHold |
Появление только при удержании пальца |
interactive |
Подсказка остается открытой для взаимодействия с контентом |
hideOnClick |
Закрытие подсказки при касании вне элемента |
maxTouchPoints |
Ограничение количества одновременных касаний |
onTrigger/onUntrigger |
Колбэки для обработки начала и окончания касаний |
Эти инструменты позволяют гибко настраивать работу Tippy.js на сенсорных устройствах, делая интерфейсы удобными и предсказуемыми при взаимодействии пальцем.