下面的代码是我正在尝试做的非常简单的版本。我正在尝试在按下元素时触发循环功能。这是用于触摸屏,因此在制作中我实际上使用hammer.js来统一触摸听众。这种奇怪的事情发生在IE 11中。 实际指针事件直到上下文'circle'(显示您在浏览器上按下手指的小浏览器动画)完成其打开上下文菜单的尝试之后才会触发。
如果快速按下并释放,则指针事件和指针事件将连续触发,并伴随一个循环。
这只发生在IE 11中,chrome表现得像我期望的那样。鼠标事件(以及手指触摸屏幕,而不是鼠标)也会发生这种情况,并且它会发生在hammer.js触摸和释放事件中。
毫不奇怪,如果“手指”在按住的同时移动,脚本将按预期工作,并且上下文菜单“circle”将不会尝试打开。
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()并尝试在元素和身体上触发鼠标移动,这可能会使浏览器误认为手指已移动。
我知道这似乎是一个边缘案例,但不幸的是,我有点担心需要让这个项目在这个特定的操作系统/浏览器组合中工作。