在 Surface 平板电脑上处理触摸/指针事件的最佳方式是什么?我发现它的行为相当混乱。我编写了一个脚本,它只设置所有事件处理程序来确定事件是如何被触发的(设置本机事件处理程序,使用 jQuery 作为 UI):
$.each([
"touchstart","touchmove","touchend",
"mousedown","mousemove","mouseup",
"pointerdown","pointermove","pointerup",
"MSPointerDown","MSPointerMove","MSPointerUp"
], function(i,eventname) {
tester.addEventListener(this, function(e) {
msg(eventname,e);
if ($("#prevent").is(":checked")) {
e.preventDefault();
}
if ($("#stop").is(":checked")) {
e.stopPropagation();
}
if ($("#stopimmediate").is(":checked")) {
e.stopImmediatePropagation();
}
}, false);
});
使用鼠标垫或桌面IE11,一切都很好。所有三个事件(鼠标、指针、MSPointer)都按预期的顺序触发:向下、移动、向上。
但是,当我使用触摸屏时
- 起初,pointermove 触发,然后指针向下。在屏幕上,我的手指周围出现了一个矩形。
- 重复的移动事件在不移动我的手指时触发
- 当我移动手指时不再触发任何事件
- 移除手指时的pointerend事件
我究竟做错了什么?调用 preventDefault、stopPropagation 或 stopImmediatePropagation 不会更改此行为。设置 css指针事件:无;禁用所有事件。