Javascript 在不阻止默认行为的情况下检测IE10中的收缩/缩放

Javascript 在不阻止默认行为的情况下检测IE10中的收缩/缩放,javascript,touch,internet-explorer-10,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) { myGest

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

我不想阻止默认的挤压行为,那么我的选择是什么呢


有没有办法解决这个问题,还是我一直在做这件事?

请注意,随着Windows 8的最终发布,这个评论现在已经过时了


在阅读应用您指定的css样式的文档时,
-ms touch action:none
告诉浏览器,对于该元素,应用程序应该生成您想要捕获的javascript事件。因此,事实上,我不认为你既能吃蛋糕又能吃蛋糕,要么你得到了JS事件,要么你得到了内置行为()。

你可以通过检查几个窗口/文档/屏幕变量的比率来检测缩放变化-参见

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

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

通过查看onresize事件中对
屏幕.deviceXDPI
的更改,可以检测页面缩放(ctrl-+)级别

为了获得更多的乐趣,一个手指接着另一个手指触摸绿色方框,当第二个手指触摸时,你会得到一个
MSPointerCancel
事件。但同时触碰这两个动作,你就不会有任何动作

当触摸缩放时,您经常会看到窗口滚动事件,但我不确定您能否100%依赖它。在触摸缩放结束时,似乎会出现一个窗口大小调整事件(但可能并不总是如此-请参见try)

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

  • 如果在挤压缩放-参见-或参见后更改了主体大小,则主体滚动条完全错误

  • position:fixed
    是wierd-请参见(如果缩放然后滚动,粉红色的固定位置框可能会离开视口)

  • 使用CSS
    html{-ms touch action:pan-x pan-y;}
    会禁用收缩缩放,但会使页面文本变得无法读取的小(取决于设备、配置和页面大小),我看不出
    -ms viewport
    会解决这个问题


您的函数中是否有类似于
return false;
的内容
HandleTesture
?通常情况下,事件应该是冒泡的…您错了。第一个链接显示检测到收缩缩放(并且没有-ms touch action:none)。该链接显示-ms touch action:none和收缩缩放之间的交互(您似乎同意存在问题)。另外,您所说的是对我的答案的评论,而不是答案本身,哎呀。我花了很长时间来编写和验证我的答案,如果您在发布之前花一些时间验证您的担忧,我将不胜感激。Robcat--我很高兴他们终于在Windows 8的生产版本中解决了这个问题。当时,这个问题是ked,我回答说,IE 10和windows 8不在您正在使用的版本中…看起来情况仍然如此。上的回答说,没有编程方法来防止JS中的默认行为,只能通过触摸操作。只想补充一点,IE10中的“调整大小”事件是在收缩缩放(放大和缩小)时触发的这会导致动态显示、固定定位的图层(如您所说)出现一些问题,这些图层的尺寸设置为百分比,即模式窗口在收缩到缩放时消失。您上面的工作通过添加调整大小事件侦听器和状态跟踪变量帮助我解决了这个问题,基本上可以在收缩到缩放时重新显示模式窗口。