Кратко
СкопированоСобытия touch происходят при касании HTML-элемента на тач-экранах. Сюда входит как прикосновение пальцами, так и работа со стилусом. В зависимости от того, какое действие пользователь произвёл (прикоснулся, начал двигать пальцем и так далее), произойдёт то или иное событие touch:
touchstart— срабатывает при первом касании;touchmove— срабатывает во время движения пальцем по элементу;touchend— срабатывает после окончания прикосновения;touchcancel— срабатывает при прерывании события.
Как пишется
СкопированоОбработчик начала касания по элементу (аналог mousedown):
element.addEventListener('touchstart', (event) => { console.log('Вы приложили палец к элементу')})
element.addEventListener('touchstart', (event) => {
console.log('Вы приложили палец к элементу')
})
Подписаться на событие, когда пользователь водит пальцем по элементу (аналог mousemove):
element.addEventListener('touchmove', (event) => { console.log('По мне ведут пальцем')})
element.addEventListener('touchmove', (event) => {
console.log('По мне ведут пальцем')
})
Подписаться на событие, когда пользователь закончил прикосновение (аналог mouseup):
element.addEventListener('touchend', (event) => { console.log('Прикосновение закончено')})
element.addEventListener('touchend', (event) => {
console.log('Прикосновение закончено')
})
Как понять
СкопированоКогда пользователь работает с компьютером, то чаще всего взаимодействие с элементами на экране происходит с помощью курсора. Для обработки клика нам хватает встроенного события click. Событие click также работает, если пользователь работает с интерфейсом через смартфон или планшет и взаимодействует с помощью касаний по экрану.
Однако на мобильных устройствах есть не только нажатия, но и жесты, и мультитач. Чтобы дать разработчикам возможность обрабатывать такие сложные действия пользователей, браузеры стали предоставлять низкоуровневые API для обработки touch-событий. С их помощью можно построить интерфейсы с обработкой мультитача и жестов.
Несмотря на то, что события touch очень похожи на click, главное их отличие заключается в поддержке нескольких касаний в разных местах экрана (мультитач). Всего у touch имеется 4 события:
touchstart— произойдёт в момент, когда пользователь прикоснулся к элементу;touchmove— произойдёт, когда пользователь ведёт пальцем по элементу;touchend— произойдёт, когда пользователь убрал палец с элемента (закончил прикосновение);touchcancel— произойдёт, если событие было прервано, например, если будет слишком много одновременных точек прикосновения, либо палец ушёл за пределы элемента или экрана.
Событие касания Touch, которое передаётся в обработчик, содержит несколько полезных полей:
touches— массив, который содержит объекты всех точек касаний на экране (полезно для обработки мультитач);target— массив, который содержит объекты всех точек касаний на вызываемом элементе.Touches
В примере используем поля событий и типы событий касаний. Используйте смартфон, так как касания не работают при использовании мыши.
- Chrome 22, поддерживается
- Edge 12, поддерживается
- Firefox 52, поддерживается
- Safari, не поддерживается
На практике
Скопированосоветует
Скопировано🛠 Стоит учесть, что браузеры в ответ на некоторые действия пользователя отправляют одновременно и событие click, и событие touch. Например, при прикосновении к элементу (допустим по кнопке) последовательность событий будет следующей: touchstart → touchend → mousedown → mouseup → click.
Стоит помнить эту особенность, если вы на одном и том же элементе делаете обработку этих событий. Если необходимо, чтобы события мыши не возникали на элементе, то в обработчике события касания нужно вызвать prevent:
element.addEventListener('touchstart', (event) => { event.preventDefault() // События мыши теперь не будут вызываться})
element.addEventListener('touchstart', (event) => {
event.preventDefault()
// События мыши теперь не будут вызываться
})
🛠 С помощью тач-событий можно делать обработку жестов. Например, свайпов. Для этого необходимо будет сохранять координаты, где пользователь прикоснулся (событие touchstart), и сравнивать с изменением координат во время движения пальца (событие touchmove). Подробнее можно посмотреть в примере.