關於移動端滾動穿透問題的解決


關於移動端滾動穿透問題的解決

移動端滾動穿透問題:在移動端進行fixed彈窗的時候,在彈窗上滑動會導致下層頁面跟着滾動,影響用戶體驗,這種現象稱為‘滾動穿透’。

三種解決辦法中,視需求選擇解決辦法:

方法一:overflow:hidden;

在列表容器的父容器設置樣式overflow:hidden來禁用滾動

html.vox , html.vox body{
  height:100%;
  overflow:hidden;
}

當彈出彈窗的時候,為底部頁面HTML添加樣式,取消彈窗的時候刪除樣式

這種方式的缺點就是當彈窗彈出的時候,禁用了HTML和body的滾動條,滾動條列表的滾動位置會丟失,重置到沒有滾動的狀態。需要js重置;(不推薦使用)

 方式二:阻止touchmove默認事件

通過阻止touchmove事件禁用滾動事件

var modal = document.getElementById('modal');
modal.addEventListener('touchmove',function(e){
        e.preventDefault();
},false);

缺點:彈窗里滾動事件也會失效,所以如果彈窗內容不會出現滾動時可以使用

方式三:position:fixed

 var ModalHelper = (function(bodyCls){
        var scrollTop;
        return{
            afterOpen:function(){
                scrollTop = document.scrollingElement.scrollTop;n
                document.body.classList.add(bodyCls);
                document.body.style.top = -scrollTop+'px';
            },
            beforeClose:function(){
                document.body.classList.remove(bodyCls); 
                document.scrollingElement.scrollTop = scrollTop;
            }
        }
    })('modal-open');
 function openModal(){
        ModalHelper.afterOpen();
    }
    function closeModal(){
        ModalHelper.beforeClose();
    }

這種方式能夠完美避免上兩種方法的弊端,推薦使用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM