JS об'єкт TouchEvent


Загальний опис

TouchEvent — це API в JavaScript, що дозволяє розробникам взаємодіяти з сенсорними екранами шляхом відстеження дій користувачів, таких як дотик, свайп, масштабування чи прокрутка. Цей API створений для роботи з багатотач (multitouch) пристроями, включаючи смартфони, планшети та інші гаджети із сенсорними екранами. TouchEvent забезпечують потужний інструментарій для побудови інтерактивних інтерфейсів, які реагують на жести.

TouchEvent включають кілька ключових подій:

  • touchstart: Виникає, коли палець торкається екрана. Ця подія є початковою точкою взаємодії.
  • touchmove: Генерується під час переміщення пальця по екрану. Вона часто використовується для обробки свайпів або жестів.
  • touchend: Викликається, коли користувач забирає палець з екрана, завершуючи дотик.
  • touchcancel: Виникає, якщо дотик перерваний через системне втручання (наприклад, вхідний дзвінок або інша перешкода).

Об’єкт TouchEvent, який передається до обробників цих подій, містить кілька важливих властивостей:

  • touches: Колекція всіх точок дотику, активних у даний момент.
  • targetTouches: Список точок дотику, які взаємодіють із конкретним елементом DOM.
  • changedTouches: Містить точки дотику, що змінилися в результаті події (наприклад, додавання чи забір пальця).

Для роботи з TouchEvent слід пам'ятати про координати точок дотику, які доступні через властивості кожного об’єкта Touch:

  • clientX та clientY — координати в межах видимої області браузера.
  • pageX та pageY — координати відносно всієї сторінки.

Приклад:

element.addEventListener('touchstart', (event) => {
  console.log('Дотик на координатах:', event.touches[0].clientX, event.touches[0].clientY);
});

Ці події є асинхронними і дозволяють відстежувати багатоканальні дотики. Наприклад, за допомогою touches.length можна дізнатися, скільки пальців одночасно торкаються екрана, що корисно для жестів масштабування або обертання.

автор: Bond

Порада

Тримайте код обробників подій максимально простим, особливо для touchmove, щоб уникнути затримок. Для складних обчислень використовуйте requestAnimationFrame().

автор: Bond
Порада

Слухайте подію touchcancel, щоб обробити перервані дотики. Наприклад, якщо користувач покидає екран під час свайпу, можна відмінити поточну взаємодію.

автор: Bond
Порада

TouchEvent мають велике значення для розробки мобільних інтерфейсів, але їх підтримка залежить від пристрою та браузера. Щоб забезпечити сумісність, часто рекомендується комбінувати TouchEvent з MouseEvent (mousedown, mousemove, mouseup) для роботи на пристроях без сенсорного екрану.

автор: Bond

Синтаксис

element.addEventListener('touchstart', (event) => {
    // Ваш код
});

element.addEventListener('touchmove', (event) => {
    // Ваш код
});

element.addEventListener('touchend', (event) => {
    // Ваш код
});

element.addEventListener('touchcancel', (event) => {
    // Ваш код
});

властивості

Властивість Опис
altKey Вказує, чи була натиснута клавіша Alt під час виникнення події дотику. Застосовується для створення комбінацій дотиків із клавішами.
changedTouches Список точок дотику, які змінили свій стан під час поточної події (наприклад, припинення дотику). Використовується для відстеження окремих дотиків у мультитач-сценаріях.
ctrlKey Вказує, чи була натиснута клавіша Ctrl під час виникнення події. Використовується для реалізації складних жестів або комбінацій.
metaKey Вказує, чи була натиснута клавіша Meta (Command на Mac або Windows на Windows) під час події дотику. Корисно для створення специфічних дій на різних платформах.
shiftKey Вказує, чи була натиснута клавіша Shift під час виникнення події дотику. Використовується для модифікованих жестів чи функцій.
targetTouches Список точок дотику, які знаходяться на елементі, що викликав подію. Корисно для визначення дотиків, специфічних для конкретного елемента.
touches Містить список усіх активних точок дотику на поточному екрані під час події. Ця властивість надає об’єкт `TouchList`, який включає всі дотики, незалежно від того, чи вони пов’язані з певним елементом. Використовується для обробки мультитач-сценаріїв, таких як масштабування чи обертання.

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE
22 52 - 15 79
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4 25 6 3.2
Підтримка: серверні переглядачі
Переглядач Node.js Deno
- -

Приклади

+ запропонувати свій приклад у пісочниці

Цей приклад дозволяє користувачу малювати пальцем на екрані. Коли палець рухається, координати дотику використовуються для створення синіх кіл на полотні.

HTML

<canvas id="canvas" width="300" height="150"></canvas>

JS

const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');

canvas.addEventListener('touchmove', (event) => {
    const touch = event.touches[0];
    ctx.fillStyle = 'blue';
    ctx.beginPath();
    ctx.arc(touch.clientX, touch.clientY, 5, 0, 2 * Math.PI);
    ctx.fill();
});
автор: Bond

Цей приклад реалізує свайпи вліво та вправо для переходу між елементами галереї. Відстань свайпу визначає, чи потрібно змінювати слайд.

HTML

<div id="gallery">Демонстраційний елемент</div>

JS

let startX = 0;

const gallery = document.getElementById('gallery');

gallery.addEventListener('touchstart', (event) => {
    startX = event.touches[0].clientX;
});

gallery.addEventListener('touchend', (event) => {
    const endX = event.changedTouches[0].clientX;
    if (startX - endX > 50) {
        console.log('Свайп вліво');
    } else if (endX - startX > 50) {
        console.log('Свайп вправо');
    }
});
автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід