@sanex3339

Как остановить эвент во время его действия?

Появилась проблема.
Мне нужно во время действия эвента touchmove его остановить.

Как у меня сделано сейчас: есть setInterval (например на 3 секунды) в котором я стопаю touchmove эвент
$('body').bind('touchmove', function (e) {
              e.preventDefault();
              e.stopPropagation();
            });


Но, если в момент завершения интервала эвент touchmove будет еще совершаться (т.е. я буду тержать палец на экране и водить им по экрану), то .bind не вызовется, только при отпускании пальца и последующем тапе на экран, что неприемлемо в моей ситуации.

Как решить эту проблемку?
  • Вопрос задан
  • 613 просмотров
Решения вопроса 1
@iShatokhin
JS developer
Юрий Тарахонич указал вам правильное направление. Вот примерный код решения:

var touchTimer;
var touchFlag = 0;

$(document).on('touchstart', function (e) {
  touchTimer = setTimeout(function () { touchFlag = 1; }, 3000);
});

$(document).on('touchend', function (e) {
  touchFlag = 0;
  clearTimeout(touchTimer);
});

$(document).on('touchmove', function (e) {
  if (touchFlag)
    return false; // touch события игнорируют preventDefault
});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
sofcase
@sofcase
Веб-разработчик
Как вариант можно создать флаг, и проверять его в обработчике touchmove, т.е. если флаг true, тогда return false
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы