这听起来应该是互联网上的解决方案,但我不知道为什么我找不到它。我想在移动设备上禁用水平滚动。基本上试图实现这个目标:
body{
overflow-x:hidden // disable horizontal scrolling.
}
这可能是相关的信息:我的头标也是如此,因为我也不希望用户能够缩放:
<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" />
由于
答案 0 :(得分:97)
html, body {
overflow-x: hidden;
}
body {
position: relative;
}
位置相对很重要,我只是偶然发现它。没有它就无法工作。
答案 1 :(得分:23)
cgvector回答对我不起作用,但这样做了:
document.body.addEventListener('touchstart', function(e){ e.preventDefault(); });
我不会那样离开它,需要更聪明的逻辑来选择何时阻止滚动,但这是一个好的开始。
答案 2 :(得分:19)
为后代:
要阻止滚动但保留上下文菜单,请尝试
document.body.addEventListener('touchmove', function(e){ e.preventDefault(); });
它仍然可以防止比某些人更喜欢的方式,但是对于大多数浏览器来说,唯一的默认行为应该是滚动。
对于更复杂的解决方案,允许不可滚动的主体内的可滚动元素并防止橡皮带,请看看我的答案:
答案 3 :(得分:12)
尝试添加
html {
overflow-x: hidden;
}
以及
body {
overflow-x: hidden;
}
答案 4 :(得分:9)
我怀疑大多数人都想要禁用缩放/滚动,以便组合更像应用程序的体验;因为答案似乎包含了缩放和滚动解决方案的元素,但是没有人真的把它们钉在一起。
要回答OP,您似乎唯一需要做的就是拦截窗口的scroll
和touchmove
事件并调用preventDefault
和stopPropagation
他们产生的事件;像这样
window.addEventListener("scroll", preventMotion, false);
window.addEventListener("touchmove", preventMotion, false);
function preventMotion(event)
{
window.scrollTo(0, 0);
event.preventDefault();
event.stopPropagation();
}
在样式表中,确保您的body
和html
代码包含以下内容:
html:
{
overflow: hidden;
}
body
{
overflow: hidden;
position: relative;
margin: 0;
padding: 0;
}
但是,滚动是一回事,但您可能也希望禁用缩放。您使用标记中的元标记执行的操作:
<meta name="viewport" content="user-scalable=no" />
所有这些组合在一起为您提供类似应用的体验,可能最适合画布。
(如果你正在使用画布,请注意一些人将initial-scale
和width
等属性添加到元标记的建议,因为画布缩放他们的内容,与块元素不同,你会得到一个丑陋的画布,通常不会。)
答案 5 :(得分:4)
在风格中使用
body
{
overflow:hidden;
width:100%;
}
在头标记中使用
<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0" />
<meta name="apple-mobile-web-app-capable" content="yes" />
答案 6 :(得分:2)
在页眉中,添加
.work-slider ul {
width: 800%;
}
.work-slider ul li {
width: 12.5%;
}
在页面样式表中,添加
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-sacle=1, maximum-scale=1, user-scalable=no">
这是html和body!
答案 7 :(得分:1)
这对我有用:
window.addEventListener("touchstart", function(event){
if(event.target.tagName=="HTML" || event.target.tagName=="BODY"){
event.preventDefault();
}
} ,false);
它不能100%工作,我还添加了这个:
window.addEventListener("scroll",function(){
window.scrollTo(0,0)
},false)
答案 8 :(得分:0)
CSS属性 touch-action 可能会为您提供所需的东西,尽管它在所有目标浏览器中都是may not work。
html, body {
width: 100%; height: 100%;
overflow: hidden;
touch-action: none;
}
答案 9 :(得分:0)
尝试所有答案均未成功后,我仅通过添加以下内容就设法关闭了移动滚动:
html,
body {
overflow-x: hidden;
height: 100%;
}
body {
position: relative;
}
为此请使用%
而不是vh
。 height: 100%
是我一直想念的东西,疯了。
答案 10 :(得分:0)
设置相对亲戚的位置对我不起作用。仅当我将主体的位置设置为固定时才起作用:
document.body.style.position = "fixed";
document.body.style.overflowY = "hidden";
document.body.addEventListener('touchstart', function(e){ e.preventDefault()});
答案 11 :(得分:0)
最简单的方式,仅使用 CSS 代码:
body, html {
overflow-x: hidden;
position: relative;
}
答案 12 :(得分:0)
对于 Apple 设备 stopTask(sameAgent)
不起作用。以下代码适用于所有设备:
position: relative
答案 13 :(得分:0)
我迟到了,但我添加了这个答案,因为我尝试过的其他任何事情都没有在我的特定情况下起作用。捕获 touchmove、scroll 等事件的组合没有任何效果,而 position: relative 使一切都消失了。
我发现我必须在 HTML 和 BODY 元素上添加 height: 100%。可能并非所有以下规则都是必需的,但我花了足够长的时间偶然发现了这个神奇的组合,它似乎有效。
html {
height: 100%;
overflow: hidden;
}
body{
margin: 0;
overflow: hidden;
height: 100%;
position: relative;
}
除此之外,我在 HTML 头中还有以下内容:
<meta name="viewport" content="width=device-width, initial-scale=1">
我的应用大量使用绝对位置元素,其中一些元素在不同时间滑出视图时部分离开屏幕。因此,body 元素中没有任何内容可以为 body 提供任何面积/大小。
我发现移动设备上发生的“滚动”是由于浏览器不知道页面大小的范围以进行其视口(缩放到设备宽度)计算的结果。看起来高度为 0px 的 body 无法向浏览器传达页面的高度或宽度,因此将 body 的高度设置为 100% 是解决方案的关键。
编辑:找到我的解决方案后再次查看答案,我意识到“Toms Codery”的另一个答案与我的解决方案基本相同,尽管他只是在 x 方向上。
答案 14 :(得分:-2)
以下对我有用,虽然我没有测试每个设备都要测试: - )
$('body, html').css('overflow-y', 'hidden');
$('html, body').animate({
scrollTop:0
}, 0);
答案 15 :(得分:-2)
这可以防止在移动设备上滚动,但不能单击/点击。
document.body.addEventListener('touchstart', function(e){ e.preventDefault(); });