移動端 pc端,遮罩層滾動穿透問題

2021-09-11 06:04:36 字數 1499 閱讀 4825

常見的解決方式有一下三種:

.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,真...