2013-07-03 27 views
0

基本上,我试图确定用户使用JavaScript在iOS设备上滑动移动手指的方向。确定变量是增加还是减少?

我知道我可以揣摩出手指是使用:

e.originalEvent.touches[0].pageX; 

所以我的想法是

  1. 店先动位置的位置,说130

  2. 确定下一个位置的位置,比如129

  3. 如果当前位置大于,它正在向右移动。小于,向左移动

唯一的问题是,它会在这样一个事件中运行:

$(".container").on("touchmove", function (e) { 
    e.preventDefault(); 
}); 

所以我不知道存储先前位置最好的方法,然后下一个位置,并检查它们是否大于或小于。

我最初的想法是利用这样的:

$(".container").on("touchstart", function (e) { 
    e.preventDefault(); 
    original = e.originalEvent.touches[0].pageX; 
}); 

$(".container").on("touchmove", function (e) { 
    e.preventDefault(); 
    direction = e.originalEvent.touches[0].pageX; 
    if (direction > original) { 
     console.log("right"); 
    } else { 
     console.log("left"); 
    } 
}); 

但是,这只会确定刷卡是到原点的左侧或右侧,而左侧或以前的手指位置的权利。

回答

1

它看起来像你几乎没有 - 你应该能够获得您想要通过更新,您比较的每个事件被称为时间点,这样的行为:

也就是说,根据平台以及您试图实现的目标,您可能会发现,仅将当前位置与前一个位置进行比较会导致结果太“嘈杂”(即因为用户的手指不是只触摸一个像素,当用户慢慢地将他们的手指向右移动时,您可能会看到“右”,“右”,“左”,“右”,“右”,“左”,“右”等输出)。如果发生这种情况,您可能需要做一些事情,如记录最近5个以前的职位并比较他们,如下所示:

var positions = []; 
$(".container").on("touchstart", function (e) { 
    e.preventDefault(); 
    positions.push(e.originalEvent.touches[0].pageX); 
}); 

$(".container").on("touchmove", function (e) { 
    e.preventDefault(); 
    positions.push(e.originalEvent.touches[0].pageX); 

    var direction = 0; 
    var i; 
    for (i = 0; i < positions.length - 1; i++) { 
     if (positions[i + 1] > positions[i]) { 
      direction++; 
     } else { 
      direction--; 
     } 
    } 

    if (direction > 0) { 
     console.log("right"); 
    } 
    else { 
     console.log("left"); 
    } 

    if (positions.length > 5) { 
     positions.shift(); 
    } 
}); 
相关问题