2016-12-12 6 views
0

У меня есть этот код:салфетки жест, что ответить действие

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();

Он отлично работает, из-за распознавать салфетки жест, но когда жест выполняется, как влево, так и вправо , слайд, кажется, получает два последовательных ввода, а затем принимает два/три слайда после ... Как я могу избежать этого?

ответ

0

Пролистайте жесты кончиками пальцев - не рукой, чтобы вы могли получить до 5 событий салфетки за руку на кадр. Затем, в следующем кадре, вы получите события салфетки, обновляющие свойства каждого жестов.

Вы можете изменить свой код следующим образом, так что она ожидает текущего действия салфетки, чтобы закончить, прежде чем разрешить еще одно действие, чтобы начать:

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(); 

[править] удален if(swipe.state == "stop"){} пункт из handleSwipe() функции.

+0

Благодарим за помощь, так или иначе, это не решит мою проблему. Даже с этим кодом проблема остается прежней: функция слайда является вызовом много раз на каждом жесте салфетки ... :-( –

+0

Это странно. Это сработало для меня. Мне пришлось удалить if (проведите пальцем по экрану. state == stop), но это вызвало противоположную проблему - я вообще не получал никаких щелчков. Как только я удалил эту статью, я мог бы получить не более 2 триггеров одним ударом, и только если бы я двигал рукой медленно, я попробовал это на трех разных браузерах (Chrome, Firefox и Safari). –

+0

Я создаю переменную 'slideOnOff и устанавливаю ее как "on" переменная установлена ​​на «off», а когда функция выполняется, с setTimeout я возвращаю ее в «on» после 1 ». Затем я делаю чек ниже: ' if (slideOnOff == 'o n ') { if (swipe.direction [0]> 0) { slidePict ("dx"); } else { slidePict ("sx"); } } ' –

Смежные вопросы