在IE11中,onpointermove事件没有为文本框启动

时间:2015-01-12 12:49:21

标签: javascript html5 internet-explorer windows-8.1 internet-explorer-11

onpointermove事件未在Windows 8.1手机中的IE11中启动文本框。 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;
};

3 个答案:

答案 0 :(得分:1)

您没有看到指针移动事件,因为此移动被解释为平移手势。使用touch-action属性禁用元素上的平移,您应该开始接收pointermove事件。

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

答案 1 :(得分:0)

使用非前缀小写名称pointermove,这更符合标准兼容性和未来的兼容性

所以你的代码应该是:

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

答案 2 :(得分:0)

似乎IE10和IE11的移动版本在一些可编辑区域得到关注时会有很多错误。

在可编辑区域下方为:<textarea>, <input type="text">或类似区域,div为contentEditable属性。

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

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

现在IE11,同样的问题......它在焦点期间正确处理指针,但不会触发指针移动。这可以通过touchmove事件替换pointermove来部分解决,至少在开始支持触摸事件的最新IE11升级时(即使是TouchEvent的完全垃圾实现)。

我相信当IE程序员开始编写好的软件时,这一天永远不会到来。不幸的是,微软移动系统没有一个好的备用浏览器。

相关问题