2013-07-03 47 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(); 
    } 
}); 
相關問題