滑动(后退和前进)时禁用网页导航

时间:2015-06-04 06:52:22

标签: javascript css internet-explorer windows-phone-8 windows-phone-8.1

在Windows手机上,如果滑动来自边缘,则用户可以通过在屏幕上滑动来前后移动。此操作系统级功能阻碍了我的网页用户体验。

是否有任何js或css可以禁用它?一些黑客也会这样做。

来自windowsphone网站的快照: enter image description here

以下是参考页面的链接:http://www.windowsphone.com/en-in/how-to/wp8/basics/gestures-swipe-pan-and-stretch

请注意,我仍然需要启用水平滚动功能。

6 个答案:

答案 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;
}

结果是完全停用任何触摸事件