338 votes

Détecter un glissement de doigt grâce à JavaScript sur l'iPhone et 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.

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.

443voto

givanse Points 2421

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.

1 votes

Cela a l'air cool et simple, une idée du support pour ces événements ? touchstart , touchmove ?

1 votes

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é.

1 votes

Merde. Le sujet est fermé et je ne peux pas ajouter ma réponse !

43voto

DaiLak Points 448

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

20voto

Jorik de la Porik Points 282

Avez-vous essayé hammer.js ? http://eightmedia.github.com/hammer.js/ Fonctionne également sur les téléphones Windows

16voto

helloandre Points 5784

Ce que j'ai utilisé auparavant, c'est que vous devez détecter l'événement mousedown, enregistrer sa position x,y (selon ce qui est pertinent) puis détecter l'événement mouseup, et soustraire les deux valeurs.

29 votes

Je crois que c'est avec touchstart, touchmove, touchcancel et touchend que l'on peut travailler, et non avec mousedown ou mouseup.

15voto

Grinn Points 1966

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!");
});

4 votes

Si l'on ne veut pas que jQuery mobile manipule l'interface utilisateur, voir : stackoverflow.com/questions/8648596/

Prograide.com

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.

Powered by:

X