3

mouseup または touchend イベントを 2 回発生させずに検出しようとしています。ここに完全な例:

<!DOCTYPE html>
<html>
  <head>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
    <script>
      $(document).ready(function(){
        $("#t").on("touchend mouseup", function(e){$("body").append(e.type + "<br>"); e.preventDefault();});
      });
    </script>
  </head>
  <body>
    <div id="t" style="position: absolute; left: 200px; width: 200px; height: 200px; background: blue;"></div>
  </body>
</html>

タブレットでは、最初に touchend イベントが発生し、その後遅延して mouseup イベントが発生します。そのため、e.preventDefault() 行を含めて、必要に応じて iPad で mouseup イベントを停止します。ただし、Android には影響しません。どちらのイベントも引き続き発生します。「return false」、stopPropagation()、および/または stopImmediatePropagation() を使用しても効果はありませんでした。touchend イベントを削除することもできますが、マウスアップが発生するのを待っているタブレットの遅延は望ましくないことに注意してください。また、タブレット以外のデバイスにはマウスアップを含める必要があります。また、誰かがタッチとマウスの両方をサポートし、両方を使用できるラップトップを持っている可能性があるため、タッチ機能をテストしてからマウスサポートをアンバインドしたくありません。Android で mouseup イベントの発生を停止したいだけです。

4

3 に答える 3

0

私は不要なイベント(たとえば、突然のAndroidマウスアップ)と格闘していました。

タッチアップをリッスンして予期しないマウスアップを取得していたので、私の解決策は、すべてのイベントをフィルター ([node].setEventListener) に渡すことでした。これは、それらを発生させたいかどうかを判断し、不要なイベントを停止しました。承認されたイベント オブジェクトにカスタム フラグを設定し、それがないイベントを防止/停止します。

この方法でタイムアウトを回避できました。エレガントではありませんが、当分の間、システムに対するより多くの制御を確立しました。

于 2013-12-31T17:25:01.003 に答える
0

Google は数年前にまさにこのことについて記事を書き、それを FastButtons と呼んでいました。この実装はそれを行う必要があります:

https://developers.google.com/mobile/articles/fast_buttons

于 2013-06-27T20:54:40.973 に答える