在Windows手机上,如果滑动来自边缘,则用户可以通过在屏幕上滑动来前后移动。此操作系统级功能阻碍了我的网页用户体验。
是否有任何js或css可以禁用它?一些黑客也会这样做。
来自windowsphone网站的快照:
以下是参考页面的链接:http://www.windowsphone.com/en-in/how-to/wp8/basics/gestures-swipe-pan-and-stretch
请注意,我仍然需要启用水平滚动功能。
答案 0 :(得分:6)
复制并粘贴此JavaScript:
var xPos = null;
var yPos = null;
window.addEventListener( "touchmove", function ( event ) {
var touch = event.originalEvent.touches[ 0 ];
oldX = xPos;
oldY = yPos;
xPos = touch.pageX;
yPos = touch.pageY;
if ( oldX == null && oldY == null ) {
return false;
}
else {
if ( Math.abs( oldX-xPos ) > Math.abs( oldY-yPos ) ) {
event.preventDefault();
return false;
}
}
} );
如果你想缩小它,请复制并粘贴它:
var xPos=null;var yPos=null;window.addEventListener("touchmove",function(event){var touch=event.originalEvent.touches[0];oldX=xPos;oldY=yPos;xPos=touch.pageX;yPos=touch.pageY;if(oldX==null && oldY==null){return false;}else{if(Math.abs(oldX-xPos)>Math.abs(oldY-yPos)){event.preventDefault();return false;}}});
答案 1 :(得分:5)
您应该以两种方式尝试此解决方案:
1)CSS仅适用于Chrome / Firefox
html, body {
overscroll-behavior-x: none;
}
2)Safari的JavaScript修复
if (window.safari) {
history.pushState(null, null, location.href);
window.onpopstate = function(event) {
history.go(1);
};
}
随着时间的流逝,Safari将实现overscroll-behavior-x,我们将能够删除JS hack
可能的iOS 7 - is there a way to disable the swipe back and forward functionality in Safari?副本
答案 2 :(得分:0)
如何防止滑动事件的默认操作。在你的文档的某处。已经添加(注意我已经包含了document.ready在这个例子中,只需要添加函数):
$(document).ready(function(){
$(window).on('touchmove',function(e){e.preventDefault();});
});
在这种情况下,我认为该事件被称为“触摸移动”,您可能需要将其扩展为忽略touchstart / touchend的默认行为,但我并非100%确定。
答案 3 :(得分:0)
对于已将swipe-left配置为向后导航的Mac用户,这也是一个问题。您无法停用此设置,但可以提示用户确认他们打算离开https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload。
答案 4 :(得分:0)
查看David Hill的this Codepen。
var elem = document.getElementById("container"); //area we don't want touch drag
var defaultPrevent=function(e){e.preventDefault();}
elem.addEventListener("touchstart", defaultPrevent);
elem.addEventListener("touchmove" , defaultPrevent);
我实际上认为这也是构建对象的一种很酷的方法。
答案 5 :(得分:-3)
*{
-webkit-touch-callout: none;
}
结果是完全停用任何触摸事件