スマホでつぃっとするとなるやん。アレしてよ
∧_∧
(´・ω・) いやどす
ハ∨/~ヽ
ノ[三ノ |
(L|く_ノ
|* |
ハ、__|
""~""""""~""~""~""
指示が意味不明で困るパターンのひとつ。
実際に言われた事ないですが、言われると怖いですね。
では、今回は、スワイプイベントの付け方とかをやってみましょう。
スワイプ
jQueryでもこのイベントとかはきちんと用意はされているんですが
今回はまぁ色々やってみようかと思います。
デモ
これはスマホで見てくだしあ。Chromeのデベロッパーツール使ってもよいです
デモの仕様
- どっちの方向にスワイプを行ったのかを表示
- 方向確定後は判定、処理を行わない
- 方向確定には、30px移動時に判定を行う
実際に動かくしてもらうと、スタート位置やらなんやら数値が変わっているのが分かると思います。
このデモでは【touchstart】【touchmove】【touchend】という3つのイベントを使用しています。
各イベントについて簡単な説明を入れます。
touchstart
いわゆる、【タップしたとき】の意味となります。
touchmove
スワイプをされた時に動作。スワイプ中は常に動いています。
touchend
指を離したときに実行されます。
JSのソース
以下の内容の通りっちゃその通りなんですが
【タッチイベントのX座標】と【スワイプ時のX座標】を比較し、30px以上の差がある場合に処理を実行
但し上記処理は1度実行すると、指を離さないと二度と実行しないようにしています。
指を離して再度スワイプすると上記処理は再度実行されます。
1スワイプ1実行です。
スライダーの動作を想定していますので、ここでは制御していますが、必ずそうする必要というわけではありません。
$(function(){
var movePoint = {'sPoint':'','ePoint':'','endFlickFlg':'','diff':'','moveFlg':'0'};
movingFlg = 0; // スワイプ方向実行フラグ 0:未実行 1;実行済
/**************************************************
*
* touchHandler
* イベント処理
*
* @param Object e イベントハンドラ
* @return none;
*
**************************************************/
function touchHandler(e)
{
//------------------------------------------------
// イベントのキャンセル余計な事をさせない
//------------------------------------------------
e.preventDefault();
//------------------------------------------------
// タッチオブジェクトの取得
//------------------------------------------------
var touch = e.touches[0];
if(e.type == "touchstart")
{
//--------------------------------------------------
// タップされた時の処理
// タップされた地点のX座標を取得
//--------------------------------------------------
movePoint['sPoint'] = touch.pageX;
}
if(e.type == "touchmove")
{
//--------------------------------------------------
// スワイプされた時の処理
// タップされた地点のX座標を取得
//--------------------------------------------------
movePoint['ePoint'] = touch.pageX;
movePoint['diff'] = movePoint['sPoint'] - movePoint['ePoint'];
//--------------------------------------------------
// タップされたX座標とスワイプされた時のX座標の差分が
// 30を超えた場合は処理を実行する
//--------------------------------------------------
if(movePoint['sPoint'] < movePoint['ePoint'])
{
//----------------------------------------------------------------------
// スワイプされた時のX座標のほうが大きい場合は右へ移動したと判定する
//----------------------------------------------------------------------
movePoint['endFlickFlg'] = 1; // 右へ移動したフラグ
movePoint['diff'] = movePoint['diff']*-1; // 判定用に正の数値に変換する
$('#sData').text(movePoint['sPoint']);
$('#eData').text(movePoint['ePoint']);
$('#diffData').text(movePoint['diff']);
}
else if(movePoint['sPoint'] > movePoint['ePoint'])
{
//----------------------------------------------------------------------
// タップされた時のX座標のほうが大きい場合は左へ移動したと判定する
//----------------------------------------------------------------------
movePoint['endFlickFlg'] = 2; // 左へ移動したフラグ
$('#sData').text(movePoint['sPoint']);
$('#eData').text(movePoint['ePoint']);
$('#diffData').text(movePoint['diff']);
}
//----------------------------------------------------------------------
// スワイプ距離判定
//----------------------------------------------------------------------
if(movePoint['diff'] >= 30)
{
//----------------------------------------------------------------------
// 差分距離が30以上の場合のみ処理を実行する
//----------------------------------------------------------------------
if(movingFlg == 1) return false; // 判定済の場合は処理の終了
movingFlg = 1; // 判定済フラグを立てる
//----------------------------------------------------------------------
// 以下判定処理
//----------------------------------------------------------------------
randnum = Math.floor( Math.random() * 100 );
$('#text').text(randnum);
if(movePoint['endFlickFlg'] == 1)
{
$('#direction').text('右');
}
else if(movePoint['endFlickFlg'] == 2)
{
$('#direction').text('左');
}
}
}
if(e.type == "touchend")
{
//----------------------------------------------------------------------
// 判定済フラグを折って次回に備える
//----------------------------------------------------------------------
movingFlg = 0;
}
}
//-------------------------------------------------
// イベントの登録
//-------------------------------------------------
var box = $("#flickArea")[0];
box.addEventListener("touchstart", touchHandler, false);
box.addEventListener("touchmove", touchHandler, false);
box.addEventListener("touchend", touchHandler, false);
});