4

この jsbin デモtouchmoveでイベントを調べようとすると、Chrome と Opera for Android で 1 回だけトリガーされ、その直後に、イベントをトリガーし続けるのではなく、イベントがトリガーされますか?touchcanceltouchmove

W3C仕様touchmoveと、Android用FirefoxとAndroidのデフォルトブラウザの両方でのイベントの動作に基づいて、タッチイベントが機能するはずの方法はtouchmove、タッチがまだオンになっている間にイベントがトリガーされ続けることだと私には思えますページ。ただし、この jsbin でテストしようとした後、次のログ メッセージが表示されました。

touchstart event; starting on (140,197) on the screen, or (381,536) on the page.
touchend event; starting on (undefined,undefined) on the screen, or (undefined,undefined) on the page.
touchstart event; starting on (181,137) on the screen, or (492,372) on the page.
touchmove event; starting on (182,153) on the screen, or (495,416) on the page.
touchcancel event; starting on (undefined,undefined) on the screen, or (undefined,undefined) on the page.

これは、最初に画面をタップし ( と で示されています) 、次に画面をドラッグしたとき (touchstartと)に起こったことです。上記と同じ仕様に従うと、 touchcancel イベントは、ブラウザー インターフェイスなどの何かが干渉する場合にのみ実行する必要があります (正しく理解している場合)。touchendtouchstarttouchmovetouchcancel

私は窓から離れずに体の上で指を滑らせただけだったので、これには本当に戸惑いました。

Chrome 32Opera 19 for Androidでこの予期しない結果が得られます。

4

1 に答える 1

7

ここでの問題は、イベント ハンドラーに が含まevent.preventDefault()れていなかったため、元のアクションがまだ実行されていたため、タッチ イベントが中断されたようです。これを修正するe.preventDefault()には、現在のイベント ハンドラー関数を追加して現在のイベントをキャンセルし、Chrome と Opera でも期待どおりに動作するようにします。

作業デモ

于 2014-02-13T19:10:19.373 に答える