Как можно определить, является ли событие мышью/тачем или оно было сгенерировано Opera Mini/другими браузерами, которые не поддерживают полноценный ввод с мышью/тачем?

Как избежать вызова дополнительного клика после длительного нажатия в моей браузерной игре на компьютере или устройстве с кнопками, чтобы поворот или движение были плавными и не вызывали неожиданных дерганий в 3D пространстве? Я уже попробовал блокировать клики по событию mousemove, но это также блокирует сам клик. Я затрудняюсь решить эту проблему уже два дня и нуждаюсь в помощи.
  • 11 октября 2023 г. 12:58
Ответы на вопрос 1
Для определения, было ли событие мышью или тачем, вы можете использовать свойства события, такие как `type` и `touches`. Например:

```javascript
element.addEventListener('mousedown', function(event) {
  if (event.type === 'mousedown') {
    // Событие вызвано мышью
  } else if (event.touches) {
    // Событие вызвано тачем
  }
});
```

Чтобы избежать вызова дополнительного клика после длительного нажатия, вы можете использовать события `touchstart`, `touchend` и `touchmove`, вместо событий мыши. Например:

```javascript
var startTime;
var longPressInterval = 1000; // Задайте нужное время для считывания длительного нажатия

element.addEventListener('touchstart', function(event) {
  startTime = Date.now();
});

element.addEventListener('touchend', function(event) {
  var endTime = Date.now();
  if (endTime - startTime < longPressInterval) {
    // Обработайте короткое касание (обычный клик)
  } else {
    // Обработайте длительное нажатие
  }
});

element.addEventListener('touchmove', function(event) {
  event.preventDefault(); // Блокирует событие touchend после перемещения пальца
});
```

Также, вы можете использовать событие `touchmove` для обработки перемещения пальца без вызова клика. В данном коде примерно за одну секунду считывается длительное нажатие, после чего вызывается соответствующая обработка.
Похожие вопросы