请考虑以下情形:一个简单的解决方案,以防止Safari上的身体滚动
您有2个可滚动元素。
- 附着到$项的长流动的列表(文件).scroll()
- 一个单独的容器/重叠侦听$( “类”)。滚动()
具有以下CSS属性。
body {
overflow-y: scroll;
height: 100%;
}
.class {
height: 100%; /* 50% 20% 200px whatever you may */
position: fixed;
overflow-y: scroll;
-webkit-overflow-scrolling: touch;
}
换句话说,一个非常标准的建立,在2017年应该工作,没有任何设备上的任何问题。错了。
下面是我通过几年的经历与这个简单的设置问题,并没有找到一个良好的,可靠的解决方案:
- 叠加启动时滚动从轻微到极端闪烁顶部或底部覆盖当100%高度,无论所有iDevices的HTML复杂性。 (因为过度滚动的z-index问题或硬件加速问题,我不知道)。
- 在顶部或底部为了等待身体滚动停止过度滚动时,滚动会完全停止。
如果容器的滚动错误地停止(whilist过度滚动),并且用户保持滚动,则主体将滚动,导致用户体验非常不一致,因为用户现在最终会到达其他位置比打开覆盖层之前的身体滚动。同时也不得不停止滚动以等待过度滚动停止。
如果容器是100%的高度,并且没有滚动 - 如果用户启动 滚动,身体会滚动,滚动条将是可见的,但 页面貌似不滚动,导致不一致的用户体验 。
我试过的一些解决方案没有任何成功。
- iScroll。 iScroll通过防止文档上的任何触摸事件来停止过度滚动问题。但提供不一致和不良滚动体验imho。除此之外,它甚至不再需要。
- 其他可以想象的滚动插件。
- 事件委托 - 尝试仅为正在与之交互的元素启用滚动。在桌面上工作。不可移动的Safari浏览器。
- 可以想象每个jQuery滚动助手。温和的成功,但非常不一致。
看来,无论什么修复过去已经提出,以某种方式贬值为“各种原因”(不意味着声音阴谋。)
我读了几个星期前,苹果正在开发的更新的 滚动的WebKit的,使其跨越各类 内容类型的更均匀的iPhone服务。但在此之前,这个简单的设置在移动Safari上仍然存在问题。
我可能最终想出了一个解决方案。不过我很好奇,想听到别人是如何在2017年解决这个问题...
如果您添加了附带的HTML,那将非常有用。考虑添加一个片段。谢谢 –
你真的认为这是必要的吗?就我而言,这是一个广为人知的问题。让我知道你的想法。 – Crashtor
是的,我确实认为。 (这是3小时后,你没有答案..)但我现在出去,所以我不再使用..后来! –