Невозможно получить координаты touchevents в Javascript на устройствах Android
Я тестирую холст HTML5 и использую Javascript для рисования для устройств с поддержкой касания. Хотя я работаю на устройствах iOS, я не могу заставить его работать на Android. Я сузил его до event.pageX, не возвращая координаты, но вместо этого возвращаю 0 или undefined (на основе браузера).
Я тестировал его на своем телефоне, используя Cyanogen 7.1 в браузере Opera Mobile и Dolphin, а также на Galaxy Tab 10.1 (Android 3.1), который запускает стандартный браузер.
Я изменил код, чтобы показать предупреждение о событии touchstart, отображающем координаты 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 регистрировать координаты, любые идеи?
ЗАКЛЮЧИТЕЛЬНЫЙ РЕДАКТ: Я решил проблему, см. принятый ответ.
Ответы
Ответ 1
ЗАКЛЮЧИТЕЛЬНЫЙ РЕДАКТ: Хорошо, я получил его работу, если кто-либо найдет это и имеет аналогичную проблему, вам нужно получить доступ к массиву touch в событии, и если просто использовать одно касание (а не multi touch), возьмите первый элемент из массива, как показано ниже, или вам может потребоваться его смещение, если это неточно:
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;
Ответ 2
Не работает для меня (в контексте iScroll 5). Используемый changedTouches[0]
вместо этого, как предлагается в щелчке мыши event.pagex является NaN в браузере мобильного Chrome (v30.0.1599.92).