Shepherd.js предоставляет мощный инструмент для создания интерактивных туров по интерфейсу, однако на устройствах с сенсорными экранами возникает необходимость корректного управления touch-событиями. Библиотека изначально ориентирована на клики мышью, поэтому для работы на мобильных устройствах требуется понимать, как правильно интегрировать тач-события и какие настройки влияют на их обработку.
В JavaScript существуют основные события для сенсорного ввода:
touchstart – срабатывает при начале касания
экрана.touchmove – фиксирует движение пальца по экрану.touchend – срабатывает после окончания касания.touchcancel – фиксирует прерывание взаимодействия
(например, из-за системного уведомления).В контексте Shepherd.js эти события используются для навигации по шагам тура. Например, можно инициировать переход к следующему шагу при свайпе вправо или закрыть текущий шаг при свайпе вниз.
По умолчанию Shepherd.js реагирует на события клика на кнопки
next, back и cancel. Чтобы
обеспечить корректное взаимодействие на мобильных устройствах,
необходимо:
const tour = new Shepherd.Tour({
useModalOverlay: true,
defaultStepOptions: {
scrollTo: { beh * avior: 'smooth', block: 'center' },
cancelIcon: { enabled: true }
}
});
const nextButton = document.querySelector('.shepherd-button-next');
nextButton.addEventListener('touchstart', (e) => {
e.preventDefault();
tour.next();
});
Здесь e.preventDefault() предотвращает стандартное
поведение браузера, такое как скролл или выделение текста, что
обеспечивает плавное переключение шагов тура.
Для сложных сценариев тач-взаимодействия часто применяют сторонние библиотеки распознавания жестов, такие как Hammer.js. Она позволяет отслеживать свайпы, двойные касания и длинные удержания. Интеграция с Shepherd.js выглядит следующим образом:
const hammer = new Hammer(document.body);
hammer.on('swipeleft', () => tour.next());
hammer.on('swiperight', () => tour.back());
hammer.on('swipedown', () => tour.cancel());
Такой подход особенно полезен для мобильных интерфейсов, где стандартные кнопки могут быть неудобны.
Каждый шаг Shepherd.js можно конфигурировать отдельно для мобильных устройств. Основные параметры:
attachTo – элемент, к которому привязан шаг.buttons – массив кнопок с возможностью добавления
touchstart обработчиков.canClickTarget – определяет, разрешено ли пользователю
взаимодействовать с целевым элементом при активном шаге.scrollTo – управление скроллом при появлении шага.Пример шага с активной кнопкой для тач:
tour.addStep({
id: 'mobile-step',
text: 'Свайпните влево для следующего шага',
attachTo: { element: '.feature', on: 'bottom' },
buttons: [
{
text: 'Далее',
action: tour.next,
classes: 'shepherd-button-primary',
// поддержка тач-событий
events: { touchstart: (e) => { e.preventDefault(); tour.next(); } }
}
]
});
preventDefault() браузер может срабатывать на свайп как на
скролл страницы, что ломает тур.scrollTo или кастомных свайпов нужно учитывать, что тяжелая
анимация может замедлять реакцию тач-событий.Для кросс-платформенной поддержки рекомендуется комбинировать
стандартные click и touchstart
обработчики:
function nextStepHandler(e) {
e.preventDefault();
tour.next();
}
nextButton.addEventListener('click', nextStepHandler);
nextButton.addEventListener('touchstart', nextStepHandler);
Это гарантирует, что тур будет корректно работать как на десктопах, так и на сенсорных устройствах.
Правильная обработка touch-событий в Shepherd.js позволяет создавать
туры, удобные для мобильных пользователей. Использование
touchstart, кастомных событий на кнопках, интеграция с
Gesture-библиотеками и адаптивная настройка шагов обеспечивают плавное и
предсказуемое поведение на любых устройствах.