在position: fixed;
元素内,滚动元素将"锁定";如果你试图在触摸开始时以错误的方式滚动它们。
示例:触摸屏幕并向下拖动,然后向上拖动。元素不会滚动。如果释放,请等待几秒钟,然后尝试向上拖动,它将滚动
http://12me21.github.io/scroll-test.html
body {
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
#scroll-container {
overflow-y: scroll;
height: 100%;
}
#scroller {
height: 200vh;
font-size: 50px;
}
<body>
<div id=scroll-container>
<div id=scroller>Test<br>more text</div>
</div>
</body>
这个答案:https://stackoverflow.com/a/51733026/6232794这似乎和我遇到的问题一样,但修复方法已经不起作用了。它似乎发生在所有固定元素内部,不再是由-webkit-overflow-scrolling: touch;
引起的。
现在有办法解决这个问题吗?还是我只需要完全避开position: fixed;
?
将overflow: hidden;
添加到<html>
或<body>
似乎可以解决问题。
我不确定为什么这样做有效,但我认为问题是safari试图滚动html/body,而不是您想要的元素
因为可滚动部分位于position:fixed
元素内部,所以滚动正文没有视觉效果,所以看起来什么都没有发生。
您可以使用:
overscroll-behavior: contain;
这将只滚动子对象,不再滚动父对象。
https://developer.mozilla.org/en-US/docs/Web/CSS/overscroll-behavior
我也遇到了同样的问题,溢出隐藏帮助停止滚动body元素,但如果访问者想要,它也会禁用滚动网页。所以我创建了JQ解决方案来添加class。溢出隐藏到body元素,只有在我需要的时候。在我的情况下,当边栏有活动class时。
$(document).click(function(){
if ($(".siderbar_menu").hasClass("side-menu-active")) {
$("body").addClass("overflow-hidden-mobile");
} else {
$("body").removeClass("overflow-hidden-mobile");
};
});
对我有用。