Tooltipster — это мощная библиотека для создания кастомных всплывающих подсказок в JavaScript. В ряде случаев может возникнуть необходимость отключить подсказки на мобильных устройствах, чтобы не мешать пользовательскому интерфейсу и улучшить производительность. В этой статье рассматриваются различные подходы к этой задаче с практическими примерами.
Первый шаг — корректно определить, что пользователь работает с мобильным устройством. Существует несколько способов:
window.matchMediaconst isMobile = window.matchMedia("(max-width: 768px)").matches;
Этот метод проверяет ширину экрана и возвращает true для
устройств с шириной до 768px. Такой подход удобен для адаптивных
интерфейсов.
navigator.userAgentconst isMobile = /Android|iPhone|iPad|iPod|Opera Mini|IEMobile|WPDesktop/i.test(navigator.userAgent);
Регулярное выражение проверяет строку userAgent браузера
и позволяет определить тип устройства с высокой точностью.
После определения устройства можно инициализировать Tooltipster только на десктопах.
if (!isMobile) {
$('.tooltip').tooltipster({
theme: 'tooltipster-light',
animation: 'fade',
delay: 200,
trigger: 'hover'
});
}
hover, click, custom)В некоторых случаях может потребоваться включать или
отключать Tooltipster при изменении размеров окна. Для этого
используется событие resize:
let tooltipInitialized = false;
function manageTooltip() {
if (!isMobile && !tooltipInitialized) {
$('.tooltip').tooltipster({
theme: 'tooltipster-light',
animation: 'fade',
delay: 200
});
tooltipInitialized = true;
} else if (isMobile && tooltipInitialized) {
$('.tooltip').tooltipster('destroy');
tooltipInitialized = false;
}
}
window.addEventListener('resize', () => {
isMobile = window.matchMedia("(max-width: 768px)").matches;
manageTooltip();
});
manageTooltip();
functionBeforeTooltipster позволяет контролировать показ подсказки через колбэк
functionBefore. Это позволяет не
показывать подсказку на мобильных устройствах, даже если
инициализация выполнена:
$('.tooltip').tooltipster({
theme: 'tooltipster-light',
animation: 'fade',
functionBefore: function(instance, helper) {
if (window.matchMedia("(max-width: 768px)").matches) {
return false; // отменяет показ подсказки
}
}
});
Преимущество этого подхода — подсказка не будет показываться, но инициализация сохраняется, что полезно для динамического включения на десктопах.
Для страниц с большим количеством подсказок можно использовать массовое отключение:
if (isMobile) {
$('.tooltip').tooltipster('destroy');
}
При динамическом изменении размеров экрана это позволит освобождать ресурсы и предотвращать конфликт событий.
Tooltipster поддерживает настройку через медиа-запросы, что позволяет создавать гибридное поведение:
$('.tooltip').tooltipster({
theme: 'tooltipster-light',
animation: 'fade',
trigger: 'hover',
minWidth: 100,
maxWidth: 300,
functionReady: function(instance, helper) {
if (window.matchMedia("(max-width: 768px)").matches) {
instance.close(); // принудительное закрытие для мобильных
}
}
});
Такой подход позволяет поддерживать единый код для всех устройств, при этом поведение адаптируется под размеры экрана.
touchstart, touchend).functionBefore минимизирует создание
лишних DOM-элементов для скрытых подсказок.