在彈框上滑動時,會發現彈框下面的內容跟著在滾動,這個就是滾動穿透問題。
在 pc 端,通過在 body 上新增 overflow:hidden;
可以解決這個問題,但是該方法在移動端是無效的,所以我們通常意義上的滾動穿透指的都是移動端。
方案一:position: fixed;
body.modal-open
通過為body新增 fixed 屬性禁止body中其他元素滾動,但是會導致 body 中滾動位置丟失,所以還需要新增一些**來記住以及還原滾動位置。
彈框前:
const scrolltop = document.body.scrolltop;
彈框後:
document.body.scrolltop = scrolltop;
方案二:touchmove+preventdefault
最好將所有彈框出現後禁止滾動的元素新增到乙個 div 中(如果是為 body 元素新增 touchmove+preventdefault,會導致 modal 中內容過長時也不能滾動),然後為該元素新增 touchmove 事件監聽,並阻止元素的預設行為。
$('.modal-open .main').on('touchmove', function(e) );
移動端滾動穿透問題
一 body。一般pc端這樣就行了,但在移動端可就不行了,因為他有touchmove。二 可以阻止彈層的touchmove事件,但如果你的彈層內的內容需要滑動,這種方法pass document.body.addeventlistener touchmove function e 三 後來找到乙個比...
移動端滾動穿透解決方法
當頁面中出現彈層時,彈層頁面滾動也會引起body的滾動,解決方法如下 開啟彈層時獲取當前頁面的滾動值,並給body設定position fixed top 當前頁面的滾動值 var scrollpx body scrolltop body addclass openfixed body css to...
可能完美解決移動端滾動穿透
1.overflow hidden 但是存在的缺陷是你的網頁會回滾到頂部 2 js阻止滾動事件 但是彈窗內的元素會無法滾動 3 fixed 加上js記錄滾動的位置 這個方案應該是所有文章提到的最優方案,但是其實吧我並不喜歡這種方案,改變body或者其他父級元素的position可能會影響到子集元素的...