下面的代码是我正在尝试做的一个非常简单的版本。我试图在按下元素时触发循环功能。这是用于触摸屏的,所以在生产中我实际上是使用hammer.js 来统一触摸监听器。这种奇怪的事情发生在 IE 11 中。实际的指针事件在上下文菜单“圆圈”(显示您在浏览器上按住手指的小浏览器动画)完成打开上下文菜单的尝试之后才会触发。
如果快速按下并释放,则pointerdown 和pointerup 事件都会随着单个循环连续触发。
这只发生在 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() 并尝试在元素和身体上触发鼠标移动,这可能会假冒浏览器认为手指已经移动。
我知道这似乎是一个边缘案例,但不幸的是,我有点坚持需要让项目在这个特定的操作系统/浏览器组合中工作。