Javascript 跳跃动作:如何使每次滑动只触发一次功能?

Javascript 跳跃动作:如何使每次滑动只触发一次功能?,javascript,audio-player,leap-motion,Javascript,Audio Player,Leap Motion,我正在构建一个leap motion控制的音乐播放器,菜单系统由leap motion控制 上下倾斜滚动菜单项,右击选择该项,左击返回菜单级别 我遇到的问题是,当你在“艺术家列表”菜单上向右滑动时,它会变为“歌曲”菜单,因为跳跃运动滑动手势在帧上工作,它会多次触发我的功能,因此第一首歌曲会立即被选中 以下是相关代码: var updateSelection = function() { if(Math.floor(x) == x && $.isNumeric(x)){

我正在构建一个leap motion控制的音乐播放器,菜单系统由leap motion控制

上下倾斜滚动菜单项,右击选择该项,左击返回菜单级别

我遇到的问题是,当你在“艺术家列表”菜单上向右滑动时,它会变为“歌曲”菜单,因为跳跃运动滑动手势在帧上工作,它会多次触发我的功能,因此第一首歌曲会立即被选中

以下是相关代码:

var updateSelection = function() {
  if(Math.floor(x) == x && $.isNumeric(x)){
    var listLength = $(menu + ' li').size();
    if (x > listLength) x = listLength;
    if (x < 1) x = 1;
    $(menu + ' li').removeClass('active');
    $(menu + ' #' + x + artist ).addClass('active');
     scrollToIt = x + artist;
     idTagX = x;
     if (scrollDirection == "down") {
      var topPos = document.getElementById(scrollToIt).offsetTop;
      document.getElementById('cssmenu').scrollTop = topPos;
      //document.getElementById(scrollToIt).scrollIntoView();
    }
    else if (scrollDirection == "up"){
      var topPos = document.getElementById(scrollToIt).offsetTop;
      document.getElementById('cssmenu').scrollTop = topPos;
      //document.getElementById(scrollToIt).scrollIntoView(true);
    }
  }
}
if(frame.hands.length > 0)
{
  var hand = frame.hands[0];

  pitchRadians = hand.pitch();

  if (pitchRadians > 0.45) {
   newX = x - 0.1;
   x = roundNumber(newX, 2);
   scrollDirection = "up";
   updateSelection();
 }
 else if (pitchRadians < -0.45){
  newX = x + 0.1;
  x = roundNumber(newX, 2);
  scrollDirection = "down";
  updateSelection();
}
else {
  x = parseInt(x);
  updateSelection();
}

}
//--------------------------------------------------Swipe Selection
if (frame.gestures.length > 0) {
  for (var i = 0; i < frame.gestures.length; i++) {
    var gesture = frame.gestures[i];

    //---- Swipe ----
    if (gesture.type == "swipe") {
      var isHorizontal = Math.abs(gesture.direction[0]) > Math.abs(gesture.direction[1]);
      if(isHorizontal){
        if(gesture.direction[0] > 0){

          $(menu + ' #' + idTagX + artist).click();

          console.log(artist);
        } else {
          console.log("Menu Left");
         // $("#" + artist).hide();
          //menu = ".artists"
        }
      } else {
        // Vertical swipe              
      }
    }
  }
}


})
var updateSelection=function(){
如果(数学楼层(x)=x&&$.isNumeric(x)){
var listLength=$(菜单+'li').size();
如果(x>listLength)x=listLength;
如果(x<1)x=1;
$(menu+'li')。removeClass('active');
$(menu+'#'+x+artist).addClass('active');
scrollToIt=x+艺术家;
idTagX=x;
如果(滚动方向=“向下”){
var-topPos=document.getElementById(scrollToIt).offsetTop;
document.getElementById('cssmenu')。scrollTop=topPos;
//document.getElementById(scrollToIt.scrollIntoView();
}
else if(滚动方向==“向上”){
var-topPos=document.getElementById(scrollToIt).offsetTop;
document.getElementById('cssmenu')。scrollTop=topPos;
//document.getElementById(scrollToIt).scrollIntoView(true);
}
}
}
如果(frame.hands.length>0)
{
var-hand=frame.hands[0];
俯仰弧度=手部。俯仰();
如果(俯仰弧度>0.45){
newX=x-0.1;
x=轮号(newX,2);
滚动方向=“向上”;
更新选择();
}
否则如果(俯仰弧度<-0.45){
newX=x+0.1;
x=轮号(newX,2);
滚动方向=“向下”;
更新选择();
}
否则{
x=parseInt(x);
更新选择();
}
}
//--------------------------------------------------刷选
如果(frame.signatures.length>0){
对于(变量i=0;iMath.abs(手势方向[1]);
if(水平){
if(手势方向[0]>0){
$(菜单+“#”+idTagX+Artister)。单击();
控制台日志(艺术家);
}否则{
控制台日志(“菜单左”);
//$(“#”+artist.hide();
//菜单=“.artists”
}
}否则{
//垂直滑动
}
}
}
}
})

这很可能是一个简单的解决方案,我只是看了太长时间的代码,无法理解它。

我已经为此编写了一个解决方案,详细说明如下,以便其他用户可以查看以供将来参考

var prevSwipe = "";
var d = new Date();
var now = d.getTime();
var prevSwipeTime = now;


function rightSwipe () {
          d = new Date();
         if(prevSwipe == "right") {
                    if(prevSwipeTime + 1000 < d.getTime()) { //time elapsed, run code
                              $(menu + ' #' + idTagX + artist).click();
                              prevSwipe = "right";
                              prevSwipeTime = d.getTime();
                              console.log("prev == right");
                    } // otherwise do nothing
          } else {
                   $(menu + ' #' + idTagX + artist).click();
                    prevSwipe = "right";
                    prevSwipeTime = d.getTime();
                    console.log(prevSwipeTime);
                    console.log("prev != right");
          }
}
var prevSwipe=”“;
var d=新日期();
var now=d.getTime();
var prevSwipeTime=now;
函数rightSwipe(){
d=新日期();
如果(prevSwipe==“右”){
如果(prevSwipeTime+1000

希望这对别人有帮助

非常感谢,我在用C#做同样的尝试,你的逻辑给了我答案。非常感谢!没问题,很高兴它有用!