2011-01-17 26 views
0

Androidでは、SenchaやJQTouchやJQMobileなどのフレームワークを使用せずにjQuery(通常のjQuery)を使用していますが、左から右にスワイプ)。私は今まで何か成果を上げていますが、私はjQueryに実装する数式を決定しようとしています。左から右のスワイプイベントをキャプチャし、別の種類のジェスチャをキャプチャしません。何を指示してるんですか?私はある種の許容可能な分散が必要だと思います。私は、ここに再適用できる計算法があると仮定していますが、残念ながら私は大学の計算から離れています。あなたの答えは、うまくいけば、私を教育するでしょう。ここでjQueryでAndroidのキャンセル/バックスワイプ(スワイプを左から右にスワイプ)

は、いくつかのサンプルXの、yはスタート/フィニッシュのデータを一緒にプレイする:

(a)の右上(この場合は望ましくないジェスチャー)

21269への途中、左から斜めにスワイプ - 278,85

中央から斜めスワイプ(b)は(この場合に望ましくないジェスチャ)権利を下げるために、左

13269 - 331436

(c)の直線(一種の)中央からは、中央右(望ましいジェスチャー)に左スワイプ

34267 - 326266

又は

36494 - 355479

var gnStartX = 0; 
var gnStartY = 0; 
var gnEndX = 0; 
var gnEndY = 0; 

window.addEventListener('touchstart',function(event) { 
    gnStartX = event.touches[0].pageX; 
    gnStartY = event.touches[0].pageY; 
},false); 

window.addEventListener('touchmove',function(event) { 
    gnEndX = event.touches[0].pageX; 
    gnEndY = event.touches[0].pageY; 
},false); 

window.addEventListener('touchend',function(event) { 
    alert('START (' + gnStartX + ', ' + gnStartY + ') END (' + gnEndX + ', ' + gnEndY + ')'); 
},false); 

答えて

0

Iスルー見出さ試行錯誤がいかに簡単か、微積分は必要ありません。ミリ秒単位の時間はかなり速い必要があります。したがって、350ms以下です。 Y分散は+40または-40でなければなりません。距離は240ピクセルにする必要があります。

私は、デバイス非依存ピクセルに関する私のコードでは、このMETAタグを使用していますが

注:

<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"> 

そして、私は背中を処理しています方法/スワイプイベントキャンセル:

var gnStartX = 0; 
var gnStartY = 0; 
var gnStartTime = 0; 
var gnEndX = 0; 
var gnEndY = 0; 
var gnEndTime = 0; 

window.addEventListener('touchstart',function(event) { 
    gnStartX = event.touches[0].pageX; 
    gnStartY = event.touches[0].pageY; 
    gnStartTime = Number(new Date()); 
},false); 

window.addEventListener('touchmove',function(event) { 
    gnEndX = event.touches[0].pageX; 
    gnEndY = event.touches[0].pageY; 
    gnEndTime = Number(new Date()); 
},false); 

window.addEventListener('touchend',function(event) { 
    var nDiffTime = gnEndTime - gnStartTime; 
    var nDiffX = gnEndX - gnStartX; 
    var nDiffY = gnEndY - gnStartY; 
    // is this a swipe back/cancel event? 
    if ((nDiffTime <= 350) && (nDiffX >= 240) && (nDiffY >= -40) && (nDiffY <= 40)) { 
    event.preventDefault(); 
    goBack(); 
    } 
},false); 

これで、独自のgoBack()関数を実装するだけです。

0

Aおそらく意図をスワイプの良い指標は、スワイプラインの傾きが考えられます。

var nDiffX = gnEndX - gnStartX; 
var nDiffY = gnEndY - gnStartY; 
var nSlope = nDiffY/Math.max(0.001,nDiffX); 

if ((nDiffTime <= 350) && (Math.abs(nDiffX) >= 240)) { 
    event.preventDefault(); 
    if ((nSlope > -0.125)&&(nSlope < 0.125)) { 
    // Between lines of 1/8 and -1/8 slope - close enough to straight horizontal 
    if (nDiffX > 0) { 
     // Swiped to the right 
    } else { 
     // Swiped to the left 
    } 
    } 
    goBack(); 
} 

同様に、あなたは傾斜が右上がりまたはダウン左の場合は1にnearishであるかどうかを確認することができスワイプ、左上または右下の-1。

関連する問題