仅适用于iOS/ iPhone X / iPhone 7等
甚至jquery模态库也不起作用!https://jquerymodal.com/-在iPhone上打开模态库,你就可以滚动正文了。
我发现很难找到一个解决方案,停止身体滚动,而不使页面跳到顶部,每次模态打开(这是一样糟糕的经验,因为页面滚动)
看起来这是一个大问题,很多人都经历过这个问题。正如你在这里看到的:
- How to prevent body scrolling on iOS 12 when modal opened?
- https://stackoverflow.com/questions/49760984/stopping-body-scroll-on-modal-open-bootstrap-4
我在互联网上搜寻没有运气,有人有办法吗?!
4条答案
按热度按时间zujrkrfu1#
我已经创建了以下解决方案,它适用于iOS 12!
虽然下面的嵌入式演示使用Bootstrap 4,但相同的解决方案同样适用于Bootstrap 3,因为模态类或事件名称都没有不同。
第1步:在模态打开时,使用固定位置将
body
冻结在适当位置打开Bootstrap模态时,将名为
.modal-open
的类添加到body
。将以下附加样式添加到该类:现在只要打开一个modal,
body
就会被固定在原地,并且大小和viewport本身一样,这就完全阻止了滚动,因为没有地方可以滚动!但是:这也意味着打开一个modal会导致页面跳到顶部,因为
body
不再超出视口的底部边缘(假设页面内容更高)。第2步:在模态打开时模拟上一个滚动距离
Bootstrap暴露了当模态打开或关闭时触发的事件,我们可以使用这些事件来解决“跳转到顶部”的问题,方法是在模态打开时将
body
的顶部拉上,这样看起来滚动位置没有改变:但是,当模态关闭时,页面仍然会跳转到顶部,因为
window
的scrollTop
值仍然是0
。第3步:模态关闭时重置所有内容
现在,我们只需要挂钩到模态关闭时触发的事件,并将所有内容恢复为原来的样子:
body
上的固定定位和负顶值不需要手动删除
body
上的固定位置,因为这是通过.modal-open
类设置的,Bootstrap会在模态关闭时删除该类。演示
把所有这些放在一起,现在你可以在模式打开时防止iOS上的后台滚动,而不会丢失滚动位置!
在iOS设备上打开以下链接:https://daguy.github.io/ios-modal-fix/
643ylb082#
我们只为ios处理
position: fixed
。因为position: fixed
会像Firefox一样影响其他浏览器。这是我在typescript上处理的代码,但纯JS或其他任何东西基本上和我的一样。3bygqnnd3#
经过大量的试错,我得出了:
在默认模式下(手机),我只是删除了垂直滚动条。因为它在手机上,它坐在顶部,没有宽度。没有溢出y,手机不能滚动。
但是在桌面上,我喜欢永久水平滚动,所以我在模态期间强制它打开,以防止屏幕以17 px的宽度移位。
如果在桌面上(全宽滚动条),如果用户将浏览器缩小到576 px以下,你会得到一个转变,但我可以接受。
另外--我允许在模态中滚动,这样模态就不会在移动的屏幕的底部滚动。
euoag5mw4#
嗯,我看到已经有一些主题了,试试这个吧?
CSS media query target only iOS devices