なので、clickではなくtouchendイベントでいろんな処理をしていくんだけど、touchend時にターゲットの要素の外でもイベントが起きちゃって困った。
具体的には
ボタンの上に指をON。touchstartイベント
指を動かして、指をボタンの外に出す。touchmoveイベント
ボタンの外で指をはなす。touchendイベント
これで、ボタンに設定していたtouchendイベントが動き出す。
使う側としたら、スクロールやスワイプ?フリック?なんかをしたつもり なのに、なんか動き出したって感じかな。
この違和感をなくすために、指を動かしたら、touhcendイベントは起きないようにした。
var startY,
endY;
endY;
function touchStart(e){
//最初に触った位置を記憶
startY = endY = e.touches[0].pageY;
startY = endY = e.touches[0].pageY;
}
function touchMove(e){
function touchMove(e){
//動いている間指の位置を記録
//最後に触った位置で変数の値が決まる
endY = e.touches[0].pageY;
}
function touchEnd(e){
//iPhoneでは10ピクセルほどあそびがあって、それ以上動かさないと移動したと判定されない
//最後に触った位置で変数の値が決まる
endY = e.touches[0].pageY;
}
function touchEnd(e){
//iPhoneでは10ピクセルほどあそびがあって、それ以上動かさないと移動したと判定されない
//Android2.1だと15ピクセルくらい
if(Math.abs(startY - endY) === 0){
//処理
}//処理
}
target.addEventListener('touchstart', touchStart);
target.addEventListener('touchmove', touchMove);
target.addEventListener('touchend', touchEnd);
touchendでendYを取得しないのは、Androidのバージョンによっては、touchendでevent.touchesが取得できなくなるから
動かした距離によって処理が変わったりしないならtouchmoveイベントが起きた時点でisMoved=trueみたいにフラグをたてると良さそう
0 件のコメント:
コメントを投稿