4

在 Javascript 中,我试图检测用户何时捏捏,同时允许他们这样做。

var elm = $("#wrapper")[0];
var myGesture = new MSGesture();
myGesture.target = elm;

elm.addEventListener("MSGestureChange", handleGesture);         
elm.addEventListener("MSPointerDown", function (e) {
    myGesture.addPointer(e.pointerId);
});

我得到了这个MSPointerDown事件。

但据我所知,我需要使用-ms-touch-action: none(或 pan-y pan-x)设置有问题的元素(#wrapper)的样式,以便能够MSGestureChange在捏合时接收事件。

我不想阻止默认的捏合行为,那么我的选择是什么?

有没有办法解决这个问题,还是我坚持做一个或另一个?

4

2 回答 2

3

您可以通过检查几个窗口/文档/屏幕变量的比率来检测缩放变化 - 请参阅http://jsbin.com/abuzaz/8

通过在窗口onscrollonresize事件上注册事件来检测缩放变化。如果您担心调整大小或滚动事件“丢失”(可能会发生),那么一个丑陋的解决方案可能是还注册一个慢速间隔计时器以进行仔细检查。

您可以通过查看 与 的比率来检测当前的捏缩放级别document.documentElement.offsetHeight-window.innerHeight但这可能是由于错误/怪癖(见下文!)。

您可以通过查看screen.deviceXDPIonresize 事件中的更改来检测页面缩放 (ctrl-+) 级别。

要获得更多乐趣,请在http://jsbin.com/otocer/12上玩一下绿色框- 用一根手指然后另一MSPointerCancel根手指触摸,当第二根手指触摸时您会收到一个事件。但是同时触摸两者,你不会得到任何事件。

触摸缩放时您经常会收到窗口滚动事件,但我不确定您是否可以 100% 依赖它。似乎您在触摸缩放结束时会收到一个窗口调整大小事件(但可能并非总是如此 - 请参阅http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/1065f624-32a8-4c80- 8ced-998ba624763e)-试试http://jsbin.com/otocer/17

请注意,触摸缩放(不是页面缩放)有一些错误:

于 2013-02-11T06:22:46.727 回答
0

请注意,此评论现在已在 Windows 8 的最终版本中过时

在阅读应用您指定的 css 样式的文档时-ms-touch-action:none,告诉浏览器对于该元素,应用程序应该生成您想要捕获的 javascript 事件。所以,实际上,我不相信你的蛋糕也可以吃,要么你得到 JS 事件,要么你得到内置行为(http://msdn.microsoft.com/en-US/图书馆/即/hh673557.aspx)。

于 2012-10-04T02:33:02.330 回答