Javascript-форум (https://javascript.ru/forum/)
-   Мобильный JavaScript (https://javascript.ru/forum/mobile/)
-   -   Нажатие на левую или правую часть экрана (https://javascript.ru/forum/mobile/76163-nazhatie-na-levuyu-ili-pravuyu-chast-ehkrana.html)

Retro_1477 10.12.2018 16:07

Нажатие на левую или правую часть экрана
 
Как отследить нажатие на левую или правую часть экрана?

Nexus 10.12.2018 16:26

1. получить координаты клика;
2. получить размер экрана;
3. разделить размер экрана на 2 и сохранить значение в переменную;
4. сравнить "x" координату с размером половины экрана (получен в шаге 3), если значение х-координаты больше, то клик произошел на правой половине, если равно, то клик был точно посередине, иначе на левой.

Про прослушивание событий:
https://learn.javascript.ru/introduction-browser-events

Retro_1477 10.12.2018 16:29

Nexus, извините не правильно выразился, нужно отследить нажатие на сенсор экрана

Nexus 10.12.2018 16:47

Retro_1477, все тоже самое, даже событие.

Nexus 10.12.2018 16:50

С jq:
$(document).click(function(e){
    alert(
        (e.clientX>$(window).width()/2)?'right':'left'
    );
});

Retro_1477 10.12.2018 17:06

Мне нужно ещё учитывать длительные нажатия, или click сойдёт?

Nexus 10.12.2018 17:27

Нет, не подойдет, слушайте touchstart.
https://developer.mozilla.org/ru/doc...I/Touch_events

Retro_1477 10.12.2018 18:05

Надеюсь поможет. Спасибо!

Retro_1477 10.12.2018 19:10

Вроде получилось, но выдаётся ошибка.
var el = document.getElementsByTagName('body')[0];


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

  //el.addEventListener("touchmove", handleMove, false);
  
  function handleStart(evt) {
    evt.preventDefault();
    var touches = evt.changedTouches;
    if(window.innerWidth/2 < touches[0].pageX)
      button1 = true;
      button2 = false;
    if(window.innerWidth/2 > touches[0].pageX){
      button2 = true;
      button1 = false
    }
  }
  function handleEnd(evt) {
    evt.preventDefault();
    var touches = evt.changedTouches;
    if(window.innerWidth/2 < touches[0].pageX)
      button1 = false;
      button2 = false;
    if(window.innerWidth/2 > touches[0].pageX){
      button2 = false;
      button1 = false
    }
  }


Вот такая ошибка
[Intervention] Unable to preventDefault inside passive event listener due to target being treated as passive. See https://www.chromestatus.com/features/5093566007214080

Retro_1477 10.12.2018 20:06

Разобрался, 10 и 21 удалил, всё нормально


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