2012-03-06 2 views
22

Je suis en train de tester le canevas HTML5 et d'utiliser Javascript pour dessiner des appareils compatibles avec le tactile. Bien que je l'ai fonctionné sur des appareils iOS, je ne peux pas le faire fonctionner sur Android. Je l'ai réduit à event.pageX ne retournant pas les coordonnées, mais au lieu de renvoyer 0, ou undefined (basé sur le navigateur). Je l'ai testé sur mon téléphone en exécutant Cyanogen 7.1 dans les navigateurs Opera Mobile et Dolphin, ainsi que sur un Galaxy Tab 10.1 (Android 3.1) exécutant le navigateur standard.Vous ne pouvez pas obtenir les coordonnées de touches en Javascript sur les appareils Android

J'ai modifié le code pour afficher une alerte sur un événement touchstart affichant les coordonnées event.pageX, event.layerX et event.clientX (je suis conscient que clientX ne devrait fonctionner que sur 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); 
} 
}); 

J'ai tout le dessin fonctionnant sous iOS mais je ne peux même pas obtenir Android pour enregistrer les coordonnées, des idées?

FINAL EDIT: J'ai résolu le problème, voir la réponse acceptée.

+0

Voir [this] (http://stackoverflow.com/questions/6099268/does-html5-support-touch-on-mobile-phones). Si vous n'arrivez toujours pas à le faire fonctionner, je suppose que phoneGap fonctionnerait. – toto2

+0

Merci, cela m'a beaucoup aidé! –

+0

@Stu Nice ça marche. Pourriez-vous faire une réponse à partir de votre modification afin que cette question quitte l'onglet "questions sans réponse". :) Merci! –

Répondre

27

FINAL EDIT: Ok, je l'ai eu le travail, si quelqu'un trouve cela et a un problème similaire, vous devez accéder à la matrice tactile dans l'événement, et si vous utilisez un seul contact (plutôt que multi-touch) hors du tableau, comme ci-dessous, ou vous devrez peut compenser si ce n'est pas précis:

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

sainte merde je tirais mes cheveux. merci – user151496

+1

Pour les utilisateurs de jQuery qui se retrouvent ici, utilisez 'event.originalEvent.touches [0]' à la place ... – Shikkediel

+0

Vous m'avez sauvé la vie. J'ai essayé de trouver l'erreur pendant des heures dans une application Cordova. Enfin je peux le sortir sur toutes les plateformes. – kaiserkiwi

Questions connexes