摘要:問題眾所周知,移動端當有遮罩背景和彈出層時,在屏幕上滑動能夠滑動背景下面的內容,這就是著名的滾動穿透問題之前搜索了一圈,找到下面兩種方案之頁面彈出層上將添加到上,禁用和的滾動條但是這個方案有兩個缺點由于和的滾動條都被禁用,彈出層
問題
眾所周知,移動端當有 fixed 遮罩背景和彈出層時,在屏幕上滑動能夠滑動背景下面的內容,這就是著名的滾動穿透問題
之前搜索了一圈,找到下面兩種方案
.modal-open { &, body { overflow: hidden; height: 100%; } }
頁面彈出層上將 .modal-open 添加到 html 上,禁用 html 和 body 的滾動條
但是這個方案有兩個缺點:
由于 html 和 body的滾動條都被禁用,彈出層后頁面的滾動位置會丟失,需要用 js 來還原
頁面的背景還是能夠有滾的動的效果
js 之 touchmove + preventDefaultmodal.addEventListener("touchmove", function(e) { e.preventDefault(); }, false);
這樣用 js 阻止滾動后看起來效果不錯了,但是也有一個缺點:
彈出層里不能有其它需要滾動的內容(如大段文字需要固定高度,顯示滾動條也會被阻止)
上面兩個方案都有缺點,今天用英文關鍵字 google 了一下,才發現原來還有更好的方案
解決方案 position: fixedbody.modal-open { position: fixed; width: 100%; }
如果只是上面的 css,滾動條的位置同樣會丟失
所以如果需要保持滾動條的位置需要用 js 保存滾動條位置關閉的時候還原滾動位置
/** * ModalHelper helpers resolve the modal scrolling issue on mobile devices * https://github.com/twbs/bootstrap/issues/15852 * requires document.scrollingElement polyfill https://uedsky.com/demo/src/polyfills/document.scrollingElement.js */ var ModalHelper = (function(bodyCls) { var scrollTop; return { afterOpen: function() { scrollTop = document.scrollingElement.scrollTop; document.body.classList.add(bodyCls); document.body.style.top = -scrollTop + "px"; }, beforeClose: function() { document.body.classList.remove(bodyCls); // scrollTop lost after set position:fixed, restore it back. document.scrollingElement.scrollTop = scrollTop; } }; })("modal-open");
這樣上面3個缺點都解決了,至此滾動穿透就完美解決了
完整的示例
document.scrollingElement因為瀏覽器獲取和設置 scrollTop 存在兼容性,為了簡化上面的示例,我直接使用了 document.scrollingElement 這個新標準,對于不支持的瀏覽器我寫了個 polyfill document.scrollingElement.js
參考https://github.com/twbs/boots...
https://imququ.com/post/docum...
https://github.com/mathiasbyn...
https://segmentfault.com/q/10...
原文地址:https://uedsky.com/2016-06/mobile-modal-scroll/
獲取最佳閱讀體驗并參與討論,請訪問原文
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/79620.html
摘要:場景當頁面出現浮層的時候,滑動浮層的內容,正常情況下預期應該是浮層下邊的內容不會滾動然而事實并非如此。當屬性的值為的時候,代表該監聽器內部不會調用函數來阻止默認滑動行為,瀏覽器稱這類型的監聽器為被動監聽器。 場景 當頁面出現浮層的時候,滑動浮層的內容,正常情況下預期應該是浮層下邊的內容不會滾動;然而事實并非如此。showImg(https://user-gold-cdn.xitu.io...
摘要:場景當頁面出現浮層的時候,滑動浮層的內容,正常情況下預期應該是浮層下邊的內容不會滾動然而事實并非如此。當屬性的值為的時候,代表該監聽器內部不會調用函數來阻止默認滑動行為,瀏覽器稱這類型的監聽器為被動監聽器。 場景 當頁面出現浮層的時候,滑動浮層的內容,正常情況下預期應該是浮層下邊的內容不會滾動;然而事實并非如此。showImg(https://user-gold-cdn.xitu.io...
摘要:接下就說下我對滾動穿透問題解決方案探索的過程,希望對大家有點啟發。心想來了突然意識到寫彈窗的時候忘記處理滾動穿透的問題了。下期預告前端詞典繼承必懂知識點傳送門前端詞典代理的概念及其應用前端詞典滾動穿透問題的解決方案 背景 產品有三寶,彈窗,浮層加引導; 設計有三寶,透明,陰影加圓角; 運營有三寶,短信,推送加紅包; 程序員有一寶,這個做不了。 隨著移動端市場的份額越大,需求就越多...
摘要:接下就說下我對滾動穿透問題解決方案探索的過程,希望對大家有點啟發。心想來了突然意識到寫彈窗的時候忘記處理滾動穿透的問題了。下期預告前端詞典繼承必懂知識點傳送門前端詞典代理的概念及其應用前端詞典滾動穿透問題的解決方案 背景 產品有三寶,彈窗,浮層加引導; 設計有三寶,透明,陰影加圓角; 運營有三寶,短信,推送加紅包; 程序員有一寶,這個做不了。 隨著移動端市場的份額越大,需求就越多...
閱讀 507·2021-09-03 00:22
閱讀 1381·2021-08-03 14:03
閱讀 2098·2021-07-25 21:37
閱讀 659·2019-08-30 13:18
閱讀 1887·2019-08-29 16:19
閱讀 2696·2019-08-29 13:22
閱讀 1314·2019-08-29 12:16
閱讀 2595·2019-08-26 12:16