Uncaught TypeError: невозможно прочитать свойство «pageX» неопределенного

Я работаю с touchevents в js. Я столкнулся с этой ошибкой в ​​своем логарифме в eclipse.

document.getElementById("squareBracket").
    addEventListener("touchmove", touchHandler, false);
document.getElementById("squareBracket").
    addEventListener("touchend", touchHandler, false);

function touchHandler(e) {
 if (e.type == "touchstart") {
 alert("You touched the screen!");
  } else if (e.type == "touchmove") {
 // alert(e.changedTouches[0].pageX);
 // alert(e.changedTouches[0].pageY);
 } else if (e.type == "touchend" || e.type == "touchcancel") {
  alert('X :' + e.targetTouches[0].pageX); 
  alert('Y :' + e.targetTouches[0].pageY);
}
}

Если я удалю комментарий в if в touchmove, всплывают координаты. Однако, если он закомментирован, появляется ошибка в моем логарифме.


person Jeongbebs    schedule 13.05.2014    source источник
comment
Прежде всего, комментарии не влияют на вашу ошибку logcat. кажется, что e.targetTouches[0] имеет значение null или не определено. имейте в виду, что это changedTouches в первом случае и targetTouches во втором случае.   -  person cosmincalistru    schedule 13.05.2014
comment
поэтому я должен изменить его на changedtouches?   -  person Jeongbebs    schedule 13.05.2014


Ответы (1)


Вы должны начать понимать разницу между targetTouches, changeTouches и touches здесь: Варианты e.touches, e.targetTouches и e.changedTouches

в вашем случае в момент touchend или touchcancel список targetTouches пуст, а информация остается в changeTouches.

изменение кода на:

alert('X :' + e.changedTouches[0].pageX); 
alert('Y :' + e.changedTouches[0].pageY);

должен сделать трюк.

person Dennis Meissner    schedule 13.05.2014
comment
поэтому я могу сохранить начальные координаты в changedTouches[0] и конечные координаты в changedtouches[1]? Спасибо. - person Jeongbebs; 13.05.2014
comment
Да, но вы всегда должны проверять, есть ли элементы, доступные в вашем списке касаний, с помощью if (e.changedTouches[0] && e.changedTouches[1]) { ... } просто чтобы убедиться, что было 2 касания. - person Dennis Meissner; 13.05.2014
comment
Привет, Деннис, я добавил этот код if (e.type == "touchmove") { startX = e.changedTouches[0].pageX; startY = e.changedTouches[0].pageY; } else if (e.type == "touchend" || e.type == "touchcancel") { endX = e.changedTouches[0].pageX; endY = e.changedTouches[0].pageY; alert (startX + endX); } Он показывает только конечные координаты, почему это так? - person Jeongbebs; 13.05.2014
comment
Вам нужно сохранить свои начальные координаты в событии touchstart и использовать эти сохраненные координаты + координаты changeTouches внутри вашего события touchend. Вам нужно отслеживать это самостоятельно, javascript не может сделать это за вас - person Dennis Meissner; 13.05.2014