1

下面的代码是我正在尝试做的一个非常简单的版本。我试图在按下元素时触发循环功能。这是用于触摸屏的,所以在生产中我实际上是使用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() 并尝试在元素和身体上触发鼠标移动,这可能会假冒浏览器认为手指已经移动。

我知道这似乎是一个边缘案例,但不幸的是,我有点坚持需要让项目在这个特定的操作系统/浏览器组合中工作。

4

0 回答 0