1

以下のコードは、私がやろうとしていることの非常に単純なバージョンです。要素が押されている間にループ機能をトリガーしようとしています。これはタッチスクリーンで使用するためのものなので、本番環境では実際にhammer.jsを使用してタッチリスナーを統合しています。この奇妙な現象は IE 11 で発生します。実際のポインター イベントは、コンテキスト メニューの「円」 (ブラウザ上で指を押し下げていることを示す小さなブラウザ アニメーション) がコンテキスト メニューを開く試行を完了するまで発生しません。

押してすぐ離すと、pointerdown イベントと pointerup イベントの両方が 1 つのループとともに連続して発生します。

これは IE 11 でのみ発生し、chrome は期待どおりに動作します。これは、マウス イベント (およびマウスではなく指が画面に触れている) でも発生し、hammer.js のタッチおよびリリース イベントでも発生します。

驚くことではありませんが、押したまま「指」を動かすと、スクリプトは期待どおりに動作し、コンテキスト メニューの「円」は開こうとしません。

var timer;

$('.pan-button').on('touchstart pointerdown',down).on('touchend pointerup',up);

function down(e){
        console.log(e.type);
        $(this).attr('oncontextmenu', 'return false');
        var self = this;
        this.loop = function(){
            console.log('loop');
            timer = setTimeout(function(){self.loop();},100);
        }
        this.loop();
    }

function up(e){
        console.log(e.type);
        clearTimeout(timer);
    }

これは Windows 7 でのみ発生することを明確にしておく必要があります。Windows 8 は予想どおりに動作します。同じバージョンの IE 11.0.9600。私も e.stopPropagation() を試し、要素と本体の両方でマウスムーブをトリガーしようとしました。これにより、ブラウザが指が動いたと偽る可能性があります。

これは特殊なケースのように思えますが、残念ながら、この特定の OS/ブラウザーの組み合わせでプロジェクトを機能させる必要があり、行き詰まっています。

4

0 に答える 0