我有一个 Web 应用程序,我想在其中处理 javascript 中的捏缩放手势,而不是允许浏览器缩放所有 UI。在 IE11 中,我的理解是您需要在要为其处理指针事件的元素上指定触摸动作 CSS。
在我的应用程序中,我禁用了除平移之外的所有触摸行为(触摸动作:pan-x pan-y)。我已经在javascript中连接了pointerdown、pointerup和pointermove事件,并添加了我自己的计算来确定基于两个活动指针之间的距离(捏合手势)执行的缩放级别。
在桌面上的 IE11 中,这完全符合我的预期;但是,在 IE 的移动/地铁版本上(我一直在 Surface Pro 上进行测试),我似乎永远无法在给定时间检测到多个指针事件。它只是在第一个捕获的事件上触发pointercancel,而无法触发第二个pointerdown。如果我禁用所有触摸手势(触摸操作:无),我也可以在移动浏览器中获取多点触摸指针事件,但它不再允许平移,这是不可取的。
这是一个演示该问题的简单 jsfiddle:
http://jsfiddle.net/wqgg0Ly7/22/
$(document).ready(function()
{
var pointers = [];
function pointerDown(e)
{
pointers.push(e);
if (pointers.length >= 2)
alert("multiple pointers detected");
};
function pointerOut(e)
{
for (var i in pointers)
if (pointers[i].pointerId == e.pointerId)
pointers.splice(i, 1);
};
$(".container")
.on("pointerdown", pointerDown)
.on("pointerout", pointerOut)
.on("pointercancel", pointerOut);
});
};
如果您在支持触摸的设备上的 IE11 桌面版本中对此进行测试,您可以捏住这些 DIV 中的任何一个,您将看到检测到两个指针的警报。在 IE11 mobile 上做同样的测试,只有第一个 DIV 会检测到第二个指针;但是,它不允许像第二个 DIV 那样平移。
这仅仅是 IE Metro 中的一个错误,还是有一种解决方法允许平移一个元素但仍捕获多个指针事件?