最初のサポート情報: 現在、iOS facebook アプリに似たタッチスクリーン ナビゲーションを作成しています。画面から 1 つの div をスライドさせる必要があります (ほぼ完全に)。このために、jqueryUI ドラッグ可能を使用しています。私の問題は、divがスライドされたときに発生しますが、ユーザーは水平方向にスライドし続けます(divが奇妙な場所に移動する可能性があります)。そのため、すべての種類の水平スクロールを完全に無効にするスクリプトを作成することにしました (CSS overflox-x:hidden は役に立ちません)。
私の考えは、X 軸と Y 軸で指の速度を比較することです。以下の私のコードを見ることができます。これは、純粋に水平スクロールになるとうまく機能しますが、斜めの動きをすると壊れます。どこでもスクロールを完全に無効にすることなく、この斜めのスクロールをブロックする方法について、誰もがアイデアを持っています。
var t1,sX,sY;//vars for the initial touch start time and position
$(window).bind('touchstart',function(e){
dateX = new Date();//time at start
t1 = dateX.getTime();
sX = event.changedTouches[0].clientX;//starting x coordinates
sY = event.changedTouches[0].clientY;//starting y coordinates
});
$(window).bind('touchmove',function(e){
dateX = new Date();//get current x time
var t2 = dateX.getTime();
var T = t2 - t1;//substract initial from it
var s1X = Math.abs( event.changedTouches[0].clientX - sX);//get current x coordinates and substract initial from them
var s1Y = Math.abs( event.changedTouches[0].clientY - sY);//get current y coordinates and substract initial from them
//speed of finger in px/ms
var X=Math.abs(s1X/T);
var Y=Math.abs(s1Y/T);
//absolute value of the speeds and if moving horizontally, dont scroll
if(X>Y){
e.preventDefault();
}
});