禁用所有移动设备中的滚动

Sam*_*mmy 57 css iphone mobile android scroll

这听起来应该是互联网上的解决方案,但我不知道为什么我找不到它.我想在移动设备上禁用水平滚动.基本上试图实现这个目标:

body{
   overflow-x:hidden  // disable horizontal scrolling.
}
Run Code Online (Sandbox Code Playgroud)

这可能是相关的信息:我的头标记也是如此,因为我也不希望用户能够缩放:

<meta content='width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;' name='viewport' />
<meta name="viewport" content="width=device-width" />
Run Code Online (Sandbox Code Playgroud)

谢谢

zee*_*eek 105

html, body {
  overflow-x: hidden;
}
body {
  position: relative;
}
Run Code Online (Sandbox Code Playgroud)

位置相对很重要,我只是偶然发现它.没有它就无法工作.

  • 这应该是公认的答案.伟大的侦探工作. (4认同)
  • 谁能解释position:relative如何帮助这项工作? (2认同)
  • 我无法相信像位置一样小的东西:亲戚; 让它无法工作.谢谢! (2认同)

Cha*_*ngo 25

cgvector回答对我不起作用,但是这样做了:

document.body.addEventListener('touchstart', function(e){ e.preventDefault(); });
Run Code Online (Sandbox Code Playgroud)

我不会这样离开它,需要一个更聪明的逻辑来选择何时阻止滚动,但这是一个好的开始.

取自此处: 禁用iPhone Web应用程序中的滚动?

  • 你明白,你甚至禁用垂直页面滚动,对吗? (5认同)
  • 是的,这就是为什么它说'需要更聪明的逻辑来选择何时阻止滚动'. (5认同)
  • 它只是我还是看起来完全鲁莽? (4认同)

Tob*_*obl 21

为后代:

要防止滚动但保留上下文菜单,请尝试

document.body.addEventListener('touchmove', function(e){ e.preventDefault(); });
Run Code Online (Sandbox Code Playgroud)

它仍然可以防止比某些人更喜欢的方式,但是对于大多数浏览器来说,唯一的默认行为应该是滚动.

对于一个更复杂的解决方案,允许不可滚动的主体内的可滚动元素,并防止橡皮带,请看看我在这里的答案:

/sf/answers/1417507801/

  • 当前的Chrome版本需要这样做:`document.body.addEventListener('touchmove',function(e){e.preventDefault();},{Passive:false});`。请注意,对象变为“ true”,因此使用事件捕获。 (3认同)

Jam*_*ffy 13

尝试添加

html {
  overflow-x: hidden;
}
Run Code Online (Sandbox Code Playgroud)

以及

body {
  overflow-x: hidden;
}
Run Code Online (Sandbox Code Playgroud)

  • 读我的回答.我说把它添加到HTML标签,而不仅仅是正文. (2认同)

Kne*_*tic 11

我怀疑大多数人都想要禁用缩放/滚动,以便组合更像应用程序的体验; 因为答案似乎包含缩放和滚动解决方案的元素,但没有人真的把它们钉在一起.

滚动

要回答OP,你似乎唯一需要做的禁用滚动是拦截窗口scrolltouchmove事件,并呼吁preventDefaultstopPropagation他们产生的事件; 像这样

window.addEventListener("scroll", preventMotion, false);
window.addEventListener("touchmove", preventMotion, false);

function preventMotion(event)
{
    window.scrollTo(0, 0);
    event.preventDefault();
    event.stopPropagation();
}
Run Code Online (Sandbox Code Playgroud)

在样式表中,确保您的bodyhtml标记包含以下内容:

html:
{
    overflow: hidden;
}

body
{
    overflow: hidden;
    position: relative;
    margin: 0;
    padding: 0;
}
Run Code Online (Sandbox Code Playgroud)

缩放

但是,滚动是一回事,但您可能也想要禁用缩放.您使用标记中的元标记执行的操作:

<meta name="viewport" content="user-scalable=no" />
Run Code Online (Sandbox Code Playgroud)

所有这些组合在一起为您提供类似app的体验,可能是最适合画布的.

(如果你正在使用画布,请注意一些人添加initial-scalewidth元标记等属性的建议,因为画布会缩放它们的内容,与块元素不同,你会得到一个丑陋的画布,通常不会).

  • 正如 @brannigan 在另一条评论中提到的,使用 `window.addEventListener("touchmove", PreventMotion, { Passive: false });` (2认同)

cgv*_*tor 6

用这个风格

body
{
overflow:hidden;
width:100%;
}
Run Code Online (Sandbox Code Playgroud)

在 head 标签中使用它

<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0" />
<meta name="apple-mobile-web-app-capable" content="yes" />
Run Code Online (Sandbox Code Playgroud)


Dow*_*ski 5

在页眉中添加

<meta name="viewport" content="width=device-width, initial-scale=1, minimum-sacle=1, maximum-scale=1, user-scalable=no">
Run Code Online (Sandbox Code Playgroud)

在页面样式表中,添加

html, body {
  overflow-x: hidden;
  overflow-y: hidden;
}
Run Code Online (Sandbox Code Playgroud)

它既是 html 又是正文!