在不阻止默认行为的情况下检测IE10中的缩放
Detecting pinch/zoom in IE10 without preventing default behavior
在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
通过在窗口onscroll
和onresize
事件上注册事件来检测缩放更改。如果你担心调整大小或滚动事件"丢失"(可能会发生),那么一个糟糕的解决方案可能是注册一个慢间隔计时器来进行双重检查。
您可以通过查看document.documentElement.offsetHeight
与window.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
请注意,触摸缩放(而不是页面缩放)有一些大错误:
-
如果缩小缩放后机身尺寸发生变化,则机身滚动条完全错误-请参阅http://jsbin.com/abuzaz/1-或参见http://connect.microsoft.com/IE/feedback/details/779009/ie10-pinch-zoom-doesnt-adjust-scrollable-area-size-after-body-size-is-changed
-
position:fixed
是wierd-请参阅http://jsbin.com/iciqaf/1(如果缩放然后滚动,粉红色的固定位置框可以离开视口)。 -
使用CSS
html { -ms-touch-action: pan-x pan-y; }
可以禁用缩放,但会使页面文本变小(取决于设备、配置和页面大小),我看不出-ms-viewport
会解决这个问题。
请注意,随着Windows 8的最终发布,此注释现已过时
在读取应用您指定的css样式的文档时,-ms-touch-action:none
"告诉"浏览器,对于该元素,应用程序应该生成您想要捕获的javascript事件。所以,实际上,我不认为既有蛋糕又吃蛋糕是可能的,要么你得到了JS事件,要么你获得了内置的行为(http://msdn.microsoft.com/en-US/library/ie/hh673557.aspx)。
- 在不阻止默认行为的情况下检测IE10中的缩放
- 如何在不检查HTTP标头的情况下检测移动浏览器
- 对于如何在没有modernizr的情况下用边界半径的功能检测检查来替换我的旧浏览器检查
- 如何在javascript已经检测到的情况下将屏幕分辨率数据调整为web
- 为什么在设置了OnPush标志的情况下,Angular2在更改检测过程中同时捕捉到引用更改和基元更改
- 如何在不发出 HTTP 请求的情况下检测 SQL 数据库中的更改
- 在不使用jQuery的情况下检测javascript中的点击
- 如何在不使用 DOM 突变事件的情况下检测 AJAX 节点插入
- activateJavaScript.org如何在没有JavaScript的情况下检测您的浏览器
- 如何在没有加载事件的情况下检测Iframe何时更改位置并触发函数
- 如何在没有JavaScript库的情况下检测转换结束
- 在不使用pageYOffset的情况下检测轮子方向的Javascript(或其他语言)
- 如何在不轮询的情况下检测元素何时不再具有影子根
- 如何在不使用eval()或requireJS的情况下检测插件或脚本是否已经加载
- 这个文档是如何在根本没有设置的情况下检测到cookie的
- 如何在不重新加载的情况下检测页面导航?
- 如何在没有jQuery的情况下检测DOM元素的变化
- 在不使用用户代理的情况下检测javascript中的iPad
- 有没有办法在没有jquery的情况下检测窗口的位置
- 有没有可能在不使用isNaN的情况下检测到NaN ?