1

我有一个 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 中的一个错误,还是有一种解决方法允许平移一个元素但仍捕获多个指针事件?

4

0 回答 0