Comment détecter qu'un utilisateur a fait glisser son doigt dans une certaine direction sur une page web avec JavaScript ?
Je me demandais s'il existait une solution qui fonctionnerait pour les sites Web sur l'iPhone et sur un téléphone Android.
Comment détecter qu'un utilisateur a fait glisser son doigt dans une certaine direction sur une page web avec JavaScript ?
Je me demandais s'il existait une solution qui fonctionnerait pour les sites Web sur l'iPhone et sur un téléphone Android.
Un simple échantillon de code JS vanille :
document.addEventListener('touchstart', handleTouchStart, false);
document.addEventListener('touchmove', handleTouchMove, false);
var xDown = null;
var yDown = null;
function getTouches(evt) {
return evt.touches || // browser API
evt.originalEvent.touches; // jQuery
}
function handleTouchStart(evt) {
const firstTouch = getTouches(evt)[0];
xDown = firstTouch.clientX;
yDown = firstTouch.clientY;
};
function handleTouchMove(evt) {
if ( ! xDown || ! yDown ) {
return;
}
var xUp = evt.touches[0].clientX;
var yUp = evt.touches[0].clientY;
var xDiff = xDown - xUp;
var yDiff = yDown - yUp;
if ( Math.abs( xDiff ) > Math.abs( yDiff ) ) {/*most significant*/
if ( xDiff > 0 ) {
/* right swipe */
} else {
/* left swipe */
}
} else {
if ( yDiff > 0 ) {
/* down swipe */
} else {
/* up swipe */
}
}
/* reset values */
xDown = null;
yDown = null;
};
Testé sous Android.
Cela a l'air cool et simple, une idée du support pour ces événements ? touchstart
, touchmove
?
Il fonctionne assez bien mais a un problème de détection des mouvements droits. Je vais poster une autre réponse à ce sujet qui corrige ce problème en tant que solution JQuery (desktop). Elle ajoute également la version souris de ces événements de glissement et ajoute une option de sensibilité.
J'ai trouvé ce plugin jquery touchwipe qui fonctionne à la fois sur mon ipod touch première génération et mon droid incredible. http://www.netcu.de/jquery-touchwipe-iphone-ipad-library
Avez-vous essayé hammer.js ? http://eightmedia.github.com/hammer.js/ Fonctionne également sur les téléphones Windows
JQuery Mobile inclut également la prise en charge du balayage : http://api.jquerymobile.com/swipe/
Exemple
$("#divId").on("swipe", function(event) {
alert("It's a swipe!");
});
Si l'on ne veut pas que jQuery mobile manipule l'interface utilisateur, voir : stackoverflow.com/questions/8648596/
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
2 votes
Pour la reconnaissance par balayage, je recommande Hammer.js . Il est assez petit, et il supporte de nombreux gestes : - Swipe - Tourner - Pincer - Appuyer (longuement) - Taper - Panoramique
0 votes
Il y a un événement : "touchmove"
1 votes
@Clay celui-là ne fonctionne toujours pas dans Safari donc pas d'iPhone.
2 votes
En 2020 swiped-events est la voie à suivre
0 votes
@JohnDoherty Je suis d'accord, c'est génial !