常見的解決方式有一下三種:
.model-open
遮罩層顯示時將 .modal-open 新增到 html上,刪除多餘一頁的部分,禁止頁面滾動。
遮罩層隱藏時,移除.modal-open,恢復頁面滾動即可;
缺點:
//實現滾動條無法滾動
var mo=function(e);
/***禁止滑動***/
function stop()
/***取消滑動限制***/
function move()
遮罩層顯示時,禁止滑動。
遮罩層消失時,取消滑動限制。
優點:移動端,pc端都有效(移動端僅限遮罩層內不需要滾動的頁面)缺點:
針對缺點 (touchmove禁止滾動,使得遮罩層內部無法滾動) 的解決方法:
在內部需要滾動的區域使用iscroll外掛程式(由於iscroll外掛程式的滾動使用的是translate的原理,固不受touchmove被禁的影響);
// 引入iscroll.js;
//在進入遮罩層時,執行如下操作。
function scroll());
} // iscroll.js滾動原理:
// 利用transform改變定位的位置,固不受touchmove被禁止的影響
// 注意事項:
// 初始化時,滾動顯示容器的高度是固定的,內部需要滾動的元素高度不定,只要超出容器高度即可
// 利用iscroll.js外掛程式解決touchmove被禁下的滾動,完整**見:
我的github
body.modal-open
遮罩層顯示時,新增 .modal-open
遮罩層消失時,移除 .modal-open
優點
缺點
為解決fixed方法的如上缺點,優化如下
原理:顯示遮罩層之後,記錄頁面滾動位置,改變fixed定位的top值。 隱藏遮罩層之前,移除fixed定位,將頁面滾動到當初記錄下的滾動位置
var modalhelper = (function(bodycls) ,
beforeclose: function()
};})('modal-open');
/***進入遮罩層,禁止滑動***/
function stopscroll()
/***取消滑動限制***/
function allowscroll()
具體效果看見參考鏈結底部demo參考頁面:
移動端滾動穿透問題
一 body。一般pc端這樣就行了,但在移動端可就不行了,因為他有touchmove。二 可以阻止彈層的touchmove事件,但如果你的彈層內的內容需要滑動,這種方法pass document.body.addeventlistener touchmove function e 三 後來找到乙個比...
移動端彈出層滾動穿透問題總結
移動端彈出層 簡稱layer 時,層內有大量文字需要滾動,但是背景層 簡稱body 會隨著layer的滾動而滾動,使用者體驗較差。參考了網上的一些資料,總結解決方案如下 scrollfix scrollfix body 彈出層前 防止body層向下滾動後出現內容顯示不全的問題 html,body a...
移動端穿透問題
附上完整的解決方案參考鏈結 在彈出層加乙個父級元素遮罩層,阻止滾動事件,但是問題是遮罩層所有子元素 彈出層 也不能滾動。方法一 那麼平級設定mask,繫結事件 雖然滾動mask,頁面沒有穿透滾動問題,但是當彈出層滾動到頭繼續拉時頁面會滾動 方法二 彈出時body設定overflow hidden,真...