Как работать с тачскрином в JavaScript
Если вы ещё не оптимизировали свои сайты под мобильные устройства — пора это исправить. Рассказываем, что нужно сделать.
vlada_maestro / shutterstock
Практически все сайты хорошо адаптированы для работы с компьютерной мышью: мы можем кликать левой и правой кнопками, скролить, двигать курсор и так далее. Для этого разработчикам даже не приходится ничего делать — такие задачи берёт на себя браузер.
Ситуация с сенсорными экранами хоть и не печальная, но всё же далека от идеала.
Как работать с тачскринами
Есть четыре основных события, которые помогут адаптировать сайт для мобильных устройств с сенсорными экранами:
- touchstart — начало касания, пользователь нажал на экран;
- touchmove — пользователь двигает пальцем по экрану;
- touchend — пользователь отпустил экран;
- touchcancel — отмена касания. Это событие срабатывает, если пользователь заходит за край страницы, переворачивает экран, сворачивает браузер и так далее.
Информация о касаниях находится в параметре changedTouches объекта event. changedTouches — это массив, в котором хранится информация обо всех текущих касаниях, что позволяет обрабатывать нажатия несколькими пальцами.
В этой статье мы напишем интерфейс для сайта, который может реагировать на все четыре события, а также определяет, в каком направлении свайпает пользователь.
Вёрстка страницы
Перечисленные выше события можно ловить на любом элементе или на всём окне сразу. Но чтобы работа скрипта была более наглядной, мы создадим холст (canvas), на который будем выводить действия пользователя.
Для начала напишем код самой страницы:
Теперь добавим немного стилей:
Добавим небольшой скрипт, который будет следить, чтобы размер холста всегда соответствовал размеру экрана.
Сайт готов к началу работы, остаётся только включить симулятор событий тачскрина.
Для этого откройте в своём браузере консоль (по умолчанию F12) и найдите режим имитации различных размеров экрана (по умолчанию Ctrl + Shift + M), а затем запустите симуляцию тачскрина. Теперь нажатия мышью будут восприниматься браузером как нажатия на сенсорный экран.
Написание скрипта
Для работы с сенсорным экраном напишем несколько функций:
- TouchStart () — срабатывает при начале касания, сохраняет стартовую позицию.
- TouchMove () — срабатывает при движении, сохраняет новую позицию.
- TouchEnd () — очищает информацию о стартовой и текущей позициях.
- CheckAction () — проверяет, соответствуют ли движения пользователя по экрану какому-нибудь жесту. В нашем случае — свайпу.
Также будут две вспомогательные функции:
- Draw () — рисует точку на текущей позиции.
- DrawLine () — рисует линию между стартовой и конечной позициями.
Можем приступать:
Проверяем, как это всё работает:
Теперь в ответ на какой-нибудь жест пользователя мы можем выполнять различные манипуляции с интерфейсом. Например, большинство пользователей привыкло, что свайп слева направо открывает меню сайта.
Заключение
С помощью JavaScript можно обрабатывать разнообразные жесты. Несмотря на то что по умолчанию есть только четыре основных события, мы можем вручную прописать и другие движения, по аналогии с этими свайпами.
Особенно хорошо это работает, если обрабатывать сразу несколько касаний. Так, например, для определённых жестов можно прописать логику изменения масштаба или вращения.
Всё это можно реализовать самостоятельно или использовать уже существующие фреймворки. Некоторые из них перечислены в этой статье.