2012-03-06 42 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