以下のコードは、私がやろうとしていることの非常に単純なバージョンです。要素が押されている間にループ機能をトリガーしようとしています。これはタッチスクリーンで使用するためのものなので、本番環境では実際に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/ブラウザーの組み合わせでプロジェクトを機能させる必要があり、行き詰まっています。