Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не работает swipe (https://javascript.ru/forum/misc/76629-ne-rabotaet-swipe.html)

Retro_1477 28.01.2019 07:07

Не работает swipe
 
Пытаюсь реализовать мобильное управление и добавил swipe жесты вверх и вниз (button3 и button4) и по какой-то причине они не работают. Подскажите, в чём проблема?

var button1 = false, //влево
  button2 = false, // вправо
  button3 = false, //прыжок 
  button4 = false; //подкат

var touchstartX = 0;
var touchstartY = 0;
var touchendX = 0;
var touchendY = 0;

var el = document.getElementsByTagName('body')[0];

el.addEventListener("touchstart", handler, false);
el.addEventListener("touchend", handleEnd, false);
el.addEventListener("touchmove", handler, false);

function handler(e) {
  touchstartX = e.pageX;
  touchstartY = e.pageY;
  button2 = !(button1 = (window.innerWidth / 2) < e.changedTouches[0].pageX);
};

function handleEnd(e) {
 // touchendX = e.screenX;
  touchendY = e.pageY;
  var touches = e.changedTouches;
  if (window.innerWidth / 2 < touches[0].pageX) {
    button1 = false;
    button2 = false;
  }
  if (window.innerWidth / 2 > touches[0].pageX) {
    button2 = false;
    button1 = false;
  }
  //swipe Up
  if (touchendY < touchstartY) {
    button3 = true;
  }
  //swipe Down
  if (touchendY > touchstartY) {
    button4 = true;
  }
};

Retro_1477 28.01.2019 18:59

реализовал
var button1 = false,//влево
  button2 = false,//вправо
  button3 = false,//прыжок
  button4 = false;//скольжение

  var el = document.getElementsByTagName('body')[0],
  swipedir,
  startY,
  distY;

  el.addEventListener('touchstart', function(e){
      button2 = !(button1 = (window.innerWidth / 2) < e.changedTouches[0].pageX);
      swipedir = 'none'
      distY = 0
      startY = e.changedTouches[0].pageY
  }, false)

  el.addEventListener('touchmove', function(e){
    button2 = !(button1 = (window.innerWidth / 2) < e.changedTouches[0].pageX);
  }, false)

  el.addEventListener('touchend', function(e){
      var touchobj = e.changedTouches[0];

      if (window.innerWidth / 2 < e.changedTouches[0].pageX) {
        button1 = false;
        button2 = false;
      }
      if (window.innerWidth / 2 > e.changedTouches[0].pageX) {
        button2 = false;
        button1 = false;
      }

      distY = e.changedTouches[0].pageY - startY;
      if(distY < 0 && distY <= 40){
        button3=true;
        setTimeout(function(){
          button3 = false;
        }, 300)
      };

      if(distY > 0 && distY >= 30){
        if(game.cat.slidingTimer == true){
          button4=true;
          setTimeout(function(){
            button4 = false;
          }, 10)
        }
      }
  }, false)


Часовой пояс GMT +3, время: 00:25.