2016-12-12 3 views
0

J'ai ce code:geste swipe cette réponse l'action

var controller = new Leap.Controller({enableGestures: true}); 
 
controller.on('gesture', function (gesture){ 
 
    console.log(gesture); 
 
    if(gesture.type === 'swipe'){ 
 
     handleSwipe(gesture); 
 
    } 
 
}); 
 
function handleSwipe (swipe){ 
 
    var startFrameID; 
 
    if(swipe.state === 'stop'){ 
 
     if (swipe.direction[0] > 0){ 
 
      //this means that the swipe is to the right direction 
 
\t \t \t slideTimer = setTimeout(function(){ 
 
\t \t \t slidePict("sx"); 
 
\t \t \t },500); 
 
     }else{ 
 
      //this means that the swipe is to the left direction 
 
\t \t \t slideTimer = setTimeout(function(){ 
 
\t \t \t slidePict("dx"); 
 
\t \t \t },500); 
 
     } 
 
    } 
 
} 
 
controller.connect();

Il fonctionne très bien, en raison de reconnaître le geste swipe, mais quand le geste est effectué, à la fois à gauche et vers la droite , la diapositive semble recevoir deux entrées successives, puis prendre deux/trois diapositives suivantes ... Comment puis-je éviter cela?

Répondre

0

Les gestes de balayage sont générés par le bout des doigts - pas par la main - de sorte que vous pouvez obtenir jusqu'à 5 événements de balayage par main par image. Ensuite, à la prochaine image, vous obtiendrez des événements de balayage mettant à jour les propriétés de chaque geste.

Vous pouvez modifier votre code comme suit, de sorte qu'il attend l'action swipe en cours se termine avant d'autoriser une autre action pour commencer:

var isSwiping = false; 
var controller = new Leap.Controller({enableGestures: true}); 
controller.on('gesture', function (gesture){ 
    console.log(gesture); 
    if(gesture.type === 'swipe' && !isSwiping){ 
     isSwiping = true; 
     handleSwipe(gesture); 
    } 
}); 
function handleSwipe (swipe){ 
    var startFrameID; 
     if (swipe.direction[0] > 0){ 
      //this means that the swipe is to the right direction 
      slideTimer = setTimeout(function(){ 
      slidePict("sx"); 
      isSwiping = false; 
      },500); 
     }else{ 
      //this means that the swipe is to the left direction 
      slideTimer = setTimeout(function(){ 
      slidePict("dx"); 
      isSwiping = false; 
      },500); 
     } 
} 
controller.connect(); 

[modifier] supprimé if(swipe.state == "stop"){} clause de handleSwipe() fonction.

+0

Merci pour votre aide, de toute façon cela ne résout pas mon problème. Même avec ce code, le problème reste le même: la fonction de glissière est appelée plusieurs fois sur chaque mouvement de balayage ... :-( –

+0

C'est bizarre, ça a bien fonctionné pour moi, j'ai dû enlever if (balayer. state == stop) clause - mais cela a causé le problème inverse - en général, je n'ai pas reçu de coup de souris.Une fois que j'ai retiré cette clause, je pouvais obtenir au plus 2 déclenchements d'un seul coup et seulement si je bougeais ma main Je l'ai essayé sur 3 navigateurs différents (Chrome, Firefox et Safari) –

+0

De toute façon, je résous la question Je crée une variable 'slideOnOff et la mets en "on" Lorsque la fonction de glissière est appelée, le variable est mis à "off", et quand la fonction est exécutée, avec un setTimeout je le réinitialise à "on" après 1 ' Ensuite, je fais la vérification ci-dessous: 'if (slideOnOff ==' o n ') { if (swipe.direction [0]> 0) { slidePict ("dx"); } else { slidePict ("sx"); } } ' –