В Javascript есть только четыре события для сенсорных событий: touchstart, touchend, touchcancel и touchmove. Комбинируя их, можно контролировать то, как пользователь прикасается к экрану, и действовать соответственно. Однако обычно событие, когда программист хочет прослушивать не одно из них, а комбинацию двух или более.

Возьмем в качестве примера событие свайпа. Что потребуется для прослушивания события swipe? Возможным решением будет прослушивание событий touchstart и touchmove, проверка некоторых условий и отслеживание движения; и если он обернут в класс, вы получите инструмент, который предлагает событие смахивания, как черный ящик.

Такой служебный класс может прозрачно обрабатывать событие swipe и может использоваться везде, где это необходимо. В этом примере я объясню класс Swipe Event с помощью JavaScript, полный код можно найти здесь.

Класс для события слайда

Для каждого события касания высокого уровня должен быть создан служебный класс. В этом случае SlideEvents будет служебным классом для обработки событий слайдов в контейнере. В частности, событие слайда, определенное этим классом, будет определять, проводит ли пользователь пальцем вправо или влево по определенному контейнеру, и если это так, класс будет вызывать метод каждый раз, когда палец скользит по экрану.

Помимо прослушивания событий turchstart и события touchmove, необходимо проверить некоторые условия, чтобы определить, произошло ли событие скольжения в области контейнера и по горизонтали.

Обработчики первичных сенсорных событий, связанных с событием слайда

Во-первых, для каждого основного события касания, участвующего в событии касания высокого уровня (событии слайда или любом другом), должен быть создан обработчик. В этом случае методы handleTouchMoves и handleTouchStart отвечают этой потребности. Связь между изолированными первичными событиями должна поддерживаться с помощью атрибутов класса.

Когда запускается событие touchstart, его обработчик регистрирует координаты, где пользователь касается экрана в первый раз, и предыдущая точка будет инициализирована в координате X начальной точки.

Каждый раз, когда пользователь перемещает палец по экрану, оценивается, движется ли пользователь влево или вправо. Если пользователь скользит по горизонтали, событие смахивания запускается путем вызова метода, переданного в качестве параметра классу при его создании; но сначала необходимо рассчитать расстояние, пройденное с момента последнего инициированного события, используя предыдущую точку и текущую точку.

Конструктор

Конструктор класса получит два параметра: идентификатор контейнера и метод, который будет вызываться при возникновении события скольжения. Конструктор также инициализирует необходимые атрибуты и присваивает «this» методам, которые его требуют. Наконец, во время инициализации класса будут добавлены соответствующие обработчики для первичных событий, связанных с высокоуровневым событием касания определенного контейнера.

Как использовать

Использовать класс очень просто; просто инициализируйте объект с идентификатором контейнера и методом, который должен быть запущен, если событие слайда прослушивается таким контейнером.

Заключительные соображения

Обычно нет необходимости переопределять какое-либо поведение касания для обычных сенсорных веб-приложений, но есть очень специфические случаи, когда необходимо настроить реакцию приложения на касания пользователя. Если это так, то смешивание сенсорных событий с другой логикой программирования вредно, поэтому важно найти решения, которые сделают код как можно более чистым. Этот подход позволяет настраивать сенсорные события любой сложности, которые можно повторно использовать, когда это необходимо, и любым количеством контейнеров.