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;
};
答案 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程序员开始编写好的软件时,这一天永远不会到来。不幸的是,微软移动系统没有一个好的备用浏览器。