Не могу получить координаты touchevents в Javascript на устройствах Android - PullRequest
29 голосов
/ 06 марта 2012

Я тестирую холст HTML5 и использую Javascript для рисования на устройствах с сенсорным экраном. Хотя он работает на устройствах iOS, я не могу заставить его работать на Android. Я сузил его до того, что event.pageX не возвращает координаты, а вместо этого возвращает либо 0, либо неопределенный (в зависимости от браузера).

Я протестировал его на своем телефоне с Cyanogen 7.1 в Opera Mobile и браузере Dolphin, а также на Galaxy Tab 10.1 (Android 3.1) под управлением стандартного браузера.

Я изменил код для отображения предупреждения о событии сенсорного запуска, отображающего координаты event.pageX, event.layerX и event.clientX (я знаю, что clientX должен работать только на iOS).

canvas.addEventListener('touchstart', function(e) {
if (readyToDraw){
    alert("PageX: "+e.pageX+","+e.pageY+"\n LayerX: "+e.layerX+","+e.layerY+"\n + clientX: "+e.clientX+","+e.clientY);
    // prevent the browsers default action!
    e.preventDefault();
    paint = true;
    // Get coordinates
    var c = getCoords(e);
    addClick(c.x, c.y, false);
}
});

У меня есть полный чертеж, работающий в iOS, но я не могу даже заставить Android регистрировать координаты, есть идеи?

ЗАКЛЮЧИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: Я решил проблему, см. Принятый ответ.

Ответы [ 2 ]

37 голосов
/ 10 июня 2014

ЗАКЛЮЧИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: Хорошо, у меня все получилось, если кто-то обнаружит это и столкнется с аналогичной проблемой, вам нужно получить доступ к сенсорному массиву в рамках события, и если вы используете одно касание (а не мультитач), выньте первый элемент.массива, как показано ниже, или вам может потребоваться сместить его, если это не так:

var touch = event.touches[0];
var x = touch.pageX;
var y = touch.pageY;
// or taking offset into consideration
var x_2 = touch.pageX - canvas.offsetLeft;
var y_2 = touch.pageY - canvas.offsetTop;
0 голосов
/ 11 сентября 2017

У меня не сработало (в контексте iScroll 5). Вместо этого используется changedTouches[0], как предложено в щелчком мыши. Event.pagex - это NaN в мобильном браузере Chrome (v30.0.1599.92) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...