移動端滾動穿透問題解決方案

問題

移動端當(dāng)有 fixed 遮罩背景和彈出層時,在屏幕上滑動能夠滑動背景下面的內(nèi)容。

方案一

首先我們嘗試著用

//打開彈框時
$("html,body").css({"overlow":"hidden"});
//關(guān)閉彈框時
$("html,body").css({"overlow":"auto"});

發(fā)現(xiàn)在pc端起了作用,但在移動端還是不行,遮罩下面的可以滾動。overflow在移動端無效。

方案二

在彈出層的touchmove事件中調(diào)用preventDefault

如果彈出層本身是有滾動條的話,將會導(dǎo)致彈出層無法滾動。適用于彈出層本身不需要滾動(條)。

方案三

當(dāng)彈出層本身需要滾動時,兩個工具方法:

//打開彈框時
fixedBody:function(){
    var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
    document.body.style.cssText += 'position:fixed;top:-'+scrollTop+'px;';
},
//關(guān)閉彈框時
looseBody:function() {
    var body = document.body;
    body.style.position = '';
    var top = body.style.top;
    document.body.scrollTop = document.documentElement.scrollTop = -parseInt(top);
    body.style.top = '';
}

在彈出層顯示之前,記錄當(dāng)前的滾動位置,使body脫離文檔流,把脫離文檔流的body拉上去;
在關(guān)閉彈框?qū)訒r,讓body回到了文檔流中,再滾回到老地方。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 問題描述:移動端當(dāng)有fixed遮罩背景和彈出層時,在屏幕上滑動能夠滑動背景下面的內(nèi)容,就是所謂的滾動穿透問題。 解...
    AmilyHao閱讀 1,770評論 0 1
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,446評論 4 61
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,234評論 25 708
  • .pch文件也是一種頭文件,它的內(nèi)容能被項(xiàng)目中的其他所有源文件共享和訪問。是一個預(yù)編譯文件。 pch文件的作用: ...
    Andy_Ron閱讀 418評論 0 4

友情鏈接更多精彩內(nèi)容