1

私は現在、レスポンシブデザインとモバイルファーストのアプローチに従って、ウェブサイトの再デザインに取り組んでいます。

タッチ対応デバイスでJSを使用してスワイプイベントを検出しようとしています。この目的のために、私は次のコードを使用しています。

document.addEventListener ('touchstart', function(event) {
    //Get initial finger coords
}, false);

document.addEventListener ('touchmove', function(event) {
    //Update final finger coords
}, false);

document.addEventListener ('touchend', function(event) {
    //Compare initial and final coords, trigger swipe events if necessary
}, false);

このコードをiPad1、iPhone 4、およびAndroid 2.2.1を実行しているいくつかのデバイスでテストしました。画面上で指をドラッグすると、期待どおりの結果が得られます。touchmoveイベントは数回発生します(簡単に発生する可能性があります)。長いジェスチャーをするときは100に)。

この問題は、Android 2.3.3デバイス(Samsung Galaxy S2を使用しています)でテストすると発生します。ネイティブのブラウザを使用すると、touchmoveイベントの量は1つだけ(またはまれに2つ)に減少します。

私は何か間違ったことをしているのですか、それともそのように振る舞うことになっていますか?誰かが同じ問題を見つけましたか?touchmoveこのバージョンのAndriodでは、イベントの動作に関するドキュメントを見つけることができませんでした。

ここでテストできます(タッチ対応デバイスを使用):http://jsfiddle.net/xs5BG/embedded/result/

4

3 に答える 3

2

スクロールが機能し始めた後、Galaxy S2はタッチムーブを起動しないようです。preventDefault を実行すると、期待どおりにイベントが発生します。

于 2012-06-07T19:02:09.640 に答える
0

私のHTC Desire Z(2.3.3を実行)でjsFiddleの例をテストすると、必要に応じて、1つ以上のtouchmoveイベントが発生します。したがって、同じAPIレベルではありますが、このデバイスで実際の問題を再現することはできません:(興味深いことに、コードは現在のプロジェクトで発生している問題も示しています:最初のtouchmoveイベントには、ある種のしきい値があるようです:

指を置いて少しだけ動かすと、タッチムーブ イベントは 0 になります... しきい値を超えると、ミリ秒間隔でタッチムーブ イベントがトリガーされ、移動のすべてのピクセル距離が認識されます (そうする必要があります)。たぶんこれはあなたの現象に関連している可能性があります.2.3.3デバイスでもこれが見られますか?

于 2012-05-28T13:53:37.873 に答える
0

多くの Android バージョンでは、タッチスタートのデフォルトを防止しないと、Android デバイスはデフォルトのスクロール モードになり、タッチ イベントを webview に送信しなくなります。だからあなたはする必要があるでしょう

document.addEventListener ('touchstart', function(event) {
    event.preventDefault();
}, false); 

これですべてのタッチ イベントが発生しますが、デフォルトのスクロールは無効になります。

この問題を克服するために、スワイプ ジェスチャをエミュレートするシムがあります https://github.com/TNT-RoX/android-swipe-shim

于 2014-08-06T08:20:54.683 に答える