2014-05-13 89 views
2

我在js中修改touchevents。我在eclipse中的logcat中遇到了这个错误。Uncaught TypeError:无法读取属性'pageX'的undefined

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,坐标弹出。但是,如果它被评论,我的logcat中的错误出现。

+0

首先,评论不会影响你的logcat错误。看来e.targetTouches [0]为空或未定义。请注意它在第一种情况下是“changedTouches”,在第二种情况下是“targetTouches”。 – cosmincalistru

+0

所以我应该把它改成'changedtouches'? – Jeongbebs

回答

3

你应该开始理解targetTouches,changedTouches的差异,倒是这里:Variation of e.touches, e.targetTouches and e.changedTouches

你的情况在touchend的时刻或touchcancel的targetTouches列表为空和信息保留在changedTouches。

改变你的代码:

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

应该做的伎俩。

+0

,所以我可以将开始坐标保存在'changedTouches [0]'和结束坐标'changedtouches [1]'?谢谢。 – Jeongbebs

+0

是的,但是您应该经常检查if(e.changedTouches [0] && e.changedTouches [1]){...}是否在触摸列表中有可用项目,以确保有两次触摸。 –

+0

hey Dennis我加了这段代码'if(e.type ==“touchmove”){ \t startX = e.changedTouches [0] .pageX; \t startY = e.changedTouches [0] .pageY; (e.type ==“touchend”|| e.type ==“touchcancel”){ \t endX = e.changedTouches [0] .pageX; \t endY = e.changedTouches [0] .pageY; \t alert(startX + endX); }' 它只显示结束坐标,为什么? – Jeongbebs

相关问题