左スワイプと右スワイプのジェスチャを使用してタッチデバイス上のオブジェクトを切り替えるギャラリーを作成しています。ユーザーがスワイプしようとしているように見える場合はページスクロールを無効にし、ユーザーが望んでいることが明らかになった場合はページスクロールを有効にする必要があります。
より良いスワイプ体験を可能にするためにページスクロールを無効にすることはかなり簡単です。preventDefault()
将来使用するために座標を使用して保存します。
this.touchMove = function( event )
{
event.preventDefault();
this.finalCoord.x = event.targetTouches[0].pageX;
this.finalCoord.y = event.targetTouches[0].pageY;
};
問題は、ユーザーが特定の許容範囲を超えたときにスクロールを再開できることです。主な難しさは、同じタッチイベント中にこれを行うことです。
これは私がそれを機能させるために来た最も近いものですが、それはぎくしゃくしたスクロールをもたらし、(潜在的に)ユーザーがURLバーを見ることができないようにします:
this.touchMove = function( event )
{
event.preventDefault();
this.finalCoord.x = event.targetTouches[0].pageX;
this.finalCoord.y = event.targetTouches[0].pageY;
var changeY = this.originalCoord.y - this.finalCoord.y;
if (changeY > this.config.threshold.y || changeY < ( this.config.threshold.y * -1 ) )
{
var move = window.pageYOffset + changeY;
window.scrollTo( 0, move );
}
};
私が試したがうまくいかなかったこと:
- 条件付きで呼び出し
preventDefault()
ます。これは最も明白でしたが、残念ながら、preventDefaultが呼び出されると、それを無効にする方法はないようです。 - を使用し
stopPropigation()
ます。これにより、ページのスクロールが妨げられることはありません。 - を使用し
return false
ます。これにより、ページのスクロールが妨げられることもありません。 - 3DCSS変換を使用してスクロールを実行します。実際、これには潜在的な可能性がありますが、頭痛を誘発する行動も引き起こします。
div
イベントをハイジャックするために透明なオーバーレイを追加します。作品の追加はdiv
問題なく機能しますが、イベントを乗っ取るわけではありません。
私がやろうとしていることを達成する方法はありますか?