請考慮以下情形:一個簡單的解決方案,以防止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小時後,你沒有答案..)但我現在出去,所以我不再使用..後來! –