2012-03-06 40 views
22

我正在测试HTML5画布并使用Javascript为支持触摸的设备绘制。虽然我在iOS设备上工作,但无法在Android上使用它。我缩小到event.pageX不返回坐标,而是返回0或未定义(基于浏览器)。无法在Android设备上的Javascript中获取touchevents的坐标

我已经在运行Opera Mobile和Dolphin浏览器的Cyanogen 7.1以及运行标准浏览器的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的注册坐标,任何想法?

FINAL EDIT:我解决了这个问题,看到接受的答案。

+0

请参见[this](http://stackoverflow.com/questions/6099268/does-html5-support-touch-on-mobile-phones)。如果你仍然无法工作,我想那个phoneGap会起作用。 – toto2 2012-03-06 15:32:15

+0

谢谢,这帮了我很多! – 2012-08-06 14:50:31

+0

@Stu很好,它的工作。你能否从你的编辑中做出回答,所以这个问题留下了“未回答的问题”标签。 :) 谢谢! – 2014-06-08 18:42:35

回答

27

最终编辑:好的我得到它的工作,如果有人发现这一点,并有类似的问题,你需要访问事件内的触摸阵列,如果只是使用一个单一的触摸(而不是多点触摸)如下所示,或者如果不准确,您可能需要抵消它:

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

圣洁的废话我正在拉我的头发。谢谢 – user151496 2014-12-18 15:26:08

+1

对于最终在这里的jQuery用户,请使用'event.originalEvent.touches [0]'代替... – Shikkediel 2016-12-25 10:02:54

+0

您拯救了我的生命。我试图在cordova应用程序中查找几个小时的错误。最后我可以在所有平台上发布它。 – kaiserkiwi 2017-06-22 09:40:07