javascript - 在不阻止默认行为的情况下检测 IE10 中的捏/缩放

标签 javascript touch internet-explorer-10

在 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 事件。

我不想阻止默认的收缩行为,那么我有什么选择?

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

最佳答案

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

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

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

您可以通过查看 onresize 事件中 screen.deviceXDPI 的变化来检测页面缩放 (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

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

关于javascript - 在不阻止默认行为的情况下检测 IE10 中的捏/缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12406329/

相关文章:

javascript - Discord.js - 尝试等待异步进程并允许包装器的递归调用

javascript - 读取一个字段值,记住它,更改该字段,然后返回到之前的状态

Javascript双击事件问题

android - sencha touch Uncaught TypeError : Cannot read property 'isReady' of undefined sencha-touch-all. js:21

html - 文本输入元素不再在 IE10 中提供自动完成建议(在 IE9 中有效)

javascript - 如果在 DOM 中找不到选择器或类,则出现错误 "Cannot read property ' click' of undefined”

swift - SpriteKit 缩放

如果触摸到某个 View 的顶部,iOS 知道什么时候 touchesEnded

css - IE10悬停菜单显示

asp.net - IE10的ASP.Net更改浏览器模式