J'essaie de capturer la coordonnée tactile sur l'événement touchend
mais je ne suis pas défini. L'événement touchstart
fonctionne bien, mais le même concept échoue avec touchend
. J'ai construit ce code avec mousedown
et mouseup
et que fonctionne bien.
Qu'est-ce que je rate?
div.addEvent("touchstart", function (event) {
event.preventDefault(); // to avoid scrolling
span.innerHTML = event.page.x;
});
div.addEvent("touchend", function (event) {
span.innerHTML = event.page.x;
});
Vous devez stocker les valeurs sur touchmove
et les lire dans touchend
.
var lastMove = null;
// Save the touchstart to always have a position
div.addEvent('touchstart', function(event) {
lastMove = event;
});
// Override with touchmove, which is triggered only on move
div.addEvent('touchmove', function(event) {
lastMove = event;
});
J'ai examiné la specification , les 4 événements tactiles hérités de l'objet touchEvent
, qui comporte 3 attributs de liste contenant des informations sur tous les contacts (chaque doigt sur l'écran) au moment de l'événement , chaque liste enregistre des contacts en fonction de ce critère:changedTouches
: enregistre les contacts qui se trouvent en dehors de la surface de l'élément ciblé.touches
: Enregistre tous les contacts actuels.targetTouch
: enregistre tous les contacts actuels se trouvant dans la surface de l'élément cible.
L’événement touchend enregistre la position où le doigt a été levé à changedTouches
et le rien n’est enregistré dans aucune des autres listes. Par conséquent, si vous devez y accéder, vous devez utiliser event.changedTouches[event.changedTouches.length-1]
, qui renvoie un objet tactile avec pageX et pageY attribue des coordonnées.
La ligne entière serait:
span.innerHTML = event.changedTouches[event.changedTouches.length-1].pageX;
touchEvent
, pourquoi vous pouvez les utiliser lors d'événements Touchstart et Touchmove, et non avec touchend. Peut-être que la mise en œuvre a ajouté ce raccourci, ou que j'ai mal lu.Vous devriez utiliser changedTouches
à la place touches
dans touchend
div.addEvent("touchstart", function (event) {
event.preventDefault(); // to avoid scrolling
span.innerHTML = event.pageX;
});
div.addEvent("touchend", function (event) {
span.innerHTML = event.changedTouches[0].pageX;
});
Bien que la question ne demande pas jQuery, essayez ce code si vous avez besoin d’une alternative à jQuery. Fonctionne sur toutes les dernières versions de jQuery.
$(document).on('touchstart', '.className', function (e) {
console.log(e.originalEvent.touches[0].pageX);
});
$(document).on('touchend', '.className', function (e) {
console.log(e.originalEvent.changedTouches[0].pageX);
});
Vous pouvez éventuellement omettre 'originalEvent' et utiliser 'modifiedTouches' pour les scripts JS uniquement et jQuery/navigateurs non pris en charge.
touchStart(event) {
this.startX = event.touches[0].pageX;
},
touchEnd(event) {
this.endX = event.changedTouches[0].pageX;
},