iOS safari 允许通过固定 div 滚动 body

Posted

技术标签:

【中文标题】iOS safari 允许通过固定 div 滚动 body【英文标题】:iOS safari allows scrolling of body through fixed div 【发布时间】:2016-12-31 19:32:20 【问题描述】:

http://jsbin.com/fopiwaluwo/edit?html,css,js

http://output.jsbin.com/fopiwaluwo(全屏输出 - 应在 iPad/ios 模拟器上查看。)

当滚动到可滚动覆盖的底部或顶部时,主体也会滚动。我想在覆盖层(带有副本的白色透明区域)上滚动时禁用正文上的任何滚动。

这是我希望将其应用到的网络应用程序的简化示例。我知道添加 position: fixed 到 body 会禁用滚动但是我不能在现实世界的例子中使用它。欢迎使用 javascript 解决方案。

干杯

【问题讨论】:

【参考方案1】:

只需添加:

<script type="text/javascript">document.ontouchmove=function(event) event.preventDefault(); </script>

瞧,body 不会滚动,但覆盖会滚动 :-) 更新:似乎仅适用于运行 iOS 10 的 iPhone。 不适用于 iPad 或 iOS 9。

【讨论】:

嘿,谢谢你的回答,但不幸的是,这个在固定 div 上也禁用了滚动:( @Andre - 你是什么意思?我将此添加到您的示例中(就在&lt;/head&gt; 之前),并且覆盖滚动(粉红色部分(好的,红色,带有0.8 alpha)和“此处有一些可滚动的副本”)滚动,红色边框保持固定。这不就是你想要达到的吗? 您是在 iOS 模拟器中执行此操作吗?带有内容的 div 也会停止滚动,这不是预期的结果。 在 iPhone 7 模拟器和真正的 iPhone 6s plus(iOS 10)上测试,下载了你的 HTML,并在 &lt;/head&gt; 之前添加了我的添加。 @Andre - 你可以在这里测试它:sharkfood.com/test/so,链接只会在几天内。

以上是关于iOS safari 允许通过固定 div 滚动 body的主要内容,如果未能解决你的问题,请参考以下文章

iOS 10 Safari:防止在固定覆盖层后面滚动并保持滚动位置

iOS 上的 Safari 仅在滚动停止后显示固定元素

iOS Safari Overscrolling:下拉与弹跳

在 iOS Safari 中输入焦点后无法滚动的模式(固定元素)

iOS 12 Safari iframe + 位置:固定 + translate3d 错误

CSS android浏览器不允许滚动内容