2012-03-06 32 views
22

Tôi đang thử nghiệm canvas HTML5 và sử dụng Javascript để vẽ cho các thiết bị có hỗ trợ cảm ứng. Trong khi tôi làm việc trong các thiết bị iOS, tôi không thể làm cho nó hoạt động trên Android. Tôi đã thu hẹp nó xuống event.pageX không trả về tọa độ, nhưng thay vì trả về 0 hoặc không xác định (dựa trên Trình duyệt).Không thể nhận tọa độ của các liên lạc trong Javascript trên các thiết bị Android

Tôi đã thử nghiệm trên điện thoại chạy Cyanogen 7.1 trên trình duyệt Opera Mobile và Dolphin, cũng như trên Galaxy Tab 10.1 (Android 3.1) chạy trình duyệt chuẩn.

Tôi đã sửa đổi mã để hiển thị cảnh báo về sự kiện cảm ứng hiển thị tọa độ event.pageX, event.layerX và event.clientX (Tôi biết rằng clientX chỉ hoạt động trên 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); 
} 
}); 

Tôi có bản vẽ đầy đủ hoạt động trong iOS nhưng thậm chí không thể yêu cầu Android đăng ký tọa độ, bất kỳ ý tưởng nào?

EDIT CUỐI CÙNG: Tôi đã giải quyết vấn đề, xem câu trả lời được chấp nhận.

+0

Xem [this] (http://stackoverflow.com/questions/6099268/does-html5-support-touch-on-mobile-phones). Nếu bạn vẫn không thể làm cho nó hoạt động, tôi đoán rằng phoneGap sẽ hoạt động. – toto2

+0

Cảm ơn, điều này đã giúp tôi rất nhiều! –

+0

@Stu Đẹp nó hoạt động. Bạn có thể đưa ra câu trả lời từ chỉnh sửa của mình để câu hỏi này để lại tab "câu hỏi chưa được trả lời". :) Cảm ơn! –

Trả lời

27

FINAL EDIT: Ok tôi đã làm việc này, nếu có ai phát hiện và gặp sự cố tương tự bạn cần truy cập vào mảng cảm ứng trong sự kiện và nếu chỉ sử dụng một lần chạm (thay vì chạm nhiều lần) ra khỏi mảng, như dưới đây, hoặc bạn có thể cần phải bù đắp nếu nó không chính xác:

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

thánh crap tôi đã được kéo tóc của tôi đi. cảm ơn – user151496

+1

Đối với người dùng jQuery kết thúc ở đây, hãy sử dụng 'event.originalEvent.touches [0]' thay vì ... – Shikkediel

+0

Bạn đã cứu mạng tôi. Tôi đã cố gắng tìm lỗi trong nhiều giờ trong ứng dụng cordova. Cuối cùng tôi có thể phát hành nó trên tất cả các nền tảng. – kaiserkiwi

Các vấn đề liên quan