在 IE11 中,不会为文本框触发指针移动事件

onpointermove event is not firing up for textbox in IE11

本文关键字:指针 事件 移动 文本 IE11      更新时间:2023-09-26

在窗口 8.1 手机中,IE11 中的文本框未触发 onpointermove 事件。 OnPointerUp 和 OnPointerdown 事件正在正确触发,但 OnpointerMove。

这是重现问题的小提琴,

http://jsfiddle.net/ph0v7reu/6/

document.getElementById("test").onpointerup = function handle1(event){
    var result = document.getElementById("result");
    result.value = event.type;
    return true;
};
document.getElementById("test").onpointermove = function handle2(event){
    var result = document.getElementById("result");
    result.value = event.type;
    return true;
};
document.getElementById("test").onpointerdown = function handle3(event){
    var result = document.getElementById("result");
    result.value = event.type;
    return true;
};

您没有看到指针移动事件,因为移动被解释为平移手势。 使用触摸操作属性禁用对元素的平移,您应该开始接收指针移动事件。

input { touch-action: none; }

欲了解更多信息,你可以看看我最近关于这个的演讲:https://www.youtube.com/watch?v=l8upftEWslM#t=1136

标准的相关部分:http://www.w3.org/TR/pointerevents/#declaring-candidate-regions-for-default-touch-behaviors

使用不带前缀的小写名称 pointermove,这更有利于标准合规性和未来的兼容性

所以你的代码应该是:

document.getElementById("test").pointermove = function handle2(event){

当某些可编辑区域获得焦点时,IE10和IE11的移动版本似乎有很多错误。

在可编辑区域下表示:<textarea>, <input type="text">或类似,以及带有 contentEditable 属性的div。

IE10有一个错误,当可编辑区域获得焦点时,任何具有注册msPointerDown事件处理程序的元素都不会被触发。

这至少可以部分解决,因为msPointerMove被触发,所以至少你可以通过检查msPointerMove事件上的isMain来假设第一根手指已经触摸了该区域。任何其他触摸都使用 msPointerDown 事件正确处理。

现在IE11,同样的问题...它在聚焦期间正确处理指针向下,但不会触发指针移动。这可以通过用触摸移动事件替换指针移动来部分解决,至少在开始支持触摸事件的最新IE11升级中(即使TouchEvent的绝对完全废话实现)。

我相信IE程序员开始编写好软件的那一天永远不会到来。不幸的是,没有一个好的替代浏览器适用于Microsoft移动系统。