iOS safari:滚动在内部位置被破坏:已修复;元素



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");
};
});

对我有用。

最新更新