1. 程式人生 > >移動端滾動穿透的問題解決

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

在移動端頁面上,當有 fixed 遮罩背景和彈出層時,在螢幕上滑動能夠滑動背景下面的內容,這就是臭名昭著的滾動穿透問題 解決方法一: css之overflow:hidden
html, body {
    overflow: auto;
    height: 100%;
}
使用這種方法時,在與餓了麼前端 mint-ui 元件庫中的 Infinite scroll 存在衝突,導致在無限滾動請求下一頁資料的時候請求不成功,但是如果你的頁面上沒有分頁的,這樣還是可以很好的解決滾動穿透問題 解決方法二: touchmove + preventDefault  在彈出的提示框中阻止瀏覽器的預設行為以及冒泡行為,在可以滑動的dom元素中取消瀏覽器的預設行為以及冒泡行為
let stop = document.querySelector("#cancel");
stop.addEventListener("touchmove", (event) => {
    event.preventDefault();  //阻止預設行為     			
    event.stopPropagation(); //阻止冒泡
}, false)
let cancelStop = document.querySelector(".allReason");
cancelStop.addEventListener("touchmove", (event) => {
    event.returnValue = true;	//取消阻止預設行為                            
    event.cancelBubble = true;  //取消阻止冒泡                        
}, false)
使用這種方法會有一個缺點,那就是滑動其它地方,底部頁面不會滾動,但是在可以滑動的頁面中,將其滑動到底部或者頂部後繼續滑動,底部頁面任然可以滾動 解決方法三: css之position: fixed  +  js 滾動條的位置 在彈出遮罩層的時候給body新增樣式以及獲取滾動條的位置,在關閉遮罩層的時候移除body的樣式以及設定滾動條的位置 css
.scroll {
    position: fixed;
    width: 100%;
}
js 在需要的地方進行呼叫 scroll.afterOpen();  和  scroll.beforeClose();
var scroll = (function (className) {
    var scrollTop;
    return {
        afterOpen: function () {
            scrollTop = document.scrollingElement.scrollTop || document.body.scrollTop;
            document.body.classList.add(className);
            document.body.style.top = -scrollTop + 'px';
        },
        beforeClose: function () {
            document.body.classList.remove(className);
            document.scrollingElement.scrollTop = scrollTop;
            document.body.scrollTop = scrollTop;
        }
    };
})('scroll');
這種方式也可以很好的解決滾動穿透問題

相關推薦

移動滾動穿透解決方法

當頁面中出現彈層時,彈層頁面滾動也會引起body的滾動,解決方法如下 // 開啟彈層時獲取當前頁面的滾動值,並給body設定position:fixed;top:當前頁面的滾動值 var scrollPx = $('body').scrollTop(); $('body'

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

一、 問題描述 移動端當position:fixed的彈窗彈出時,滑動彈窗,下層的頁面會跟隨滾動 二、 解決方案 1. body 設定overflow: hidden; 當彈窗彈出時,設定body元素的overflow屬性為hidden,暴力去除滾動。 缺點:會丟失頁面的滾動位置

移動滾動穿透的問題解決

在移動端頁面上,當有 fixed 遮罩背景和彈出層時,在螢幕上滑動能夠滑動背景下面的內容,這就是臭名昭著的滾動穿透問題 解決方法一: css之overflow:hidden html, body { overflow: auto; height: 100%

移動頁面滾動穿透解決方案(薦)

移動頁面滾動穿透解決方法目前有多種解決方案,我介紹下幾種方案: 解決方案1:阻止冒泡。 //關鍵程式碼 $(".sliders,.modals").on("touchmove",func

教你小三角,適用移動等,解決移動a標簽的默認樣式

utf-8 劃線 hover -s html 出現 class span charset 1.小三角,通過給一個div設置足夠大的邊框,讓它的上邊框,右邊框,左邊框,的背景顏色設置成透明的,來實現,如下: <!DOCTYPE html> <html>

BetterScroll 在移動滾動場景的應用

rtx max 會有 快速滾動 container 切換圖片 real 由於 ecan BetterScroll 是一款重點解決移動端各種滾動場景需求的開源插件( GitHub地址 ),適用於滾動列表、選擇器、輪播圖、索引列表、開屏引導等應用場景。 為了滿足這些場景,它不僅

移動click延遲解決方法

ref link target https 不能 lec init 方法 ttr 首先要知道為什麽移動端的click會遲鈍? 谷歌的開發者文檔《300ms tap delay, gone away》可以找到原因 移動端要判斷是不是雙擊,所以單擊之後不能夠立刻觸發click,

移動滾動插件

lB github hub bar option HR 插件 BE tar 1.simulation-scroll-y.js https://fmover.hcysun.me/#/zh-cn/plugins/simulation-scroll-y?id=scrollbar

移動自適應解決方案

size 解決方案 sans key ant htm 自適應 alc 解決 http://dudodo.cc/2017/06/01/%E7%A7%BB%E5%8A%A8%E7%AB%AF%E8%87%AA%E9%80%82%E5%BA%94%E8%A7%A3%E5%86%B

移動相容性問題解決方案

1. IOS移動端click事件300ms的延遲響應 移動裝置上的web網頁是有300ms延遲的,玩玩會造成按鈕點選延遲甚至是點選失效。這是由於區分單擊事件和雙擊螢幕縮放的歷史原因造成的, 2007年蘋果釋出首款iphone上IOS系統搭載的safari為了將適用於PC端上大螢幕

移動1px問題解決方法

為什麼移動端會產生1px問題呢? UI設計師設計的時候,畫的1px(真實畫素)實際上是0.5px(css)的線或者邊框。但是他不這麼認為,他認為他畫的就是1px的線,因為他畫的稿的尺寸本身就是螢幕尺寸的2倍。假設手機視網膜屏的寬度是320x480寬,但實際尺寸是640x960寬,設計師設計圖的時候一定是按照

移動適配解決方案rem的js換算(非font-size:31.25vw,非font-size:62.5%)

在這之前做web app開發的的時候,在自適應方面一般都是寬度通過百分比,高度以iPhone6跟iPhone5之間的一個平衡值寫死,我們的設計稿都是iPhone5的640 * 1136標準,所以高度一般取個大概值,各種圖示的寬高也是取平衡值寫死,然後部分樣式通過媒體查詢來設定,例如背景圖的多倍圖

移動車牌識別解決方案

車牌識別技術,是在OCR光學字元識別技術的基礎上研發的用來識別汽車號牌特徵資訊的影象識別技術。 首先對現存的手機端車牌識別演算法進行了研究,在諸多演算法中尋找到一種適合在Android、iOS平臺上執行的演算法。先通過智慧手機的攝像頭獲得車牌的彩色影象,然後將採

重寫移動滾動條[iScroll.js核心程式碼]

最近寫元件庫的時後,發現這個滾動條是真的醜啊,決定重新擼一個滾動條: 首先咱們回顧一下移動端瀏覽器滾動條特性: 滾動條在開始滾動時漸顯,滾動結束後漸隱 滾動條不佔內容區寬度,懸浮固定 滾動條高度(深灰)和滾動區可視高度(淺灰)比等於滾動區可視高度和滾動目標的高度 當滾動目標的高度小於滾動區

移動滾動載入資料實現

模擬場景:移動端上劃到底,載入更多資料。 1、本例子基於jQuery實現。監聽滾動事件。 $(function(){ $(window).scroll(function(){ }) }) 2、獲取滾動條到文件頂部的距離,上圖scrollTop那段。原生JS可用document.documentElement

border 1px 移動相容問題解決方案

@charset "utf-8"; .border, .border-top, .border-right, .border-bottom, .border-left, .border-topbottom, .border-rightleft, .border-

移動1px的解決方法

在上個專案中,移動端1px問題被困擾了好久,設定1px邊框,實際顯示2px。https://hzzly.github.io/2017/03/13/%E7%A7%BB%E5%8A%A8%E7%AB%AF1px%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96

移動1px邊框解決方案

自己今天看網易雲音樂的時候,看著裡面的1px實在是好看,沒辦法,強迫症,然後自己把vuejs專案中的1px優化了。話不多說,上程式碼。 css名寫在最外div即可 .borderBottom1px

js 實現在移動開發,解決不同手機畫素大小的相容問題

Js 實現在移動開發網頁時,根據手機畫素不同,自動改變相對,字型的大小。 例項程式碼中以750畫素為參考,如果在350畫素手機上顯示該內容,相對字型大小為1px=0.01rem (funct

移動滾動條不流暢問題

移動端設定overflow:scroll的時候,滑動不流暢很生硬。 可以在css中加入這段。 -webkit-overflow-scrolling: touch; 但是注意,ios端觸發touch事件是在手指在螢幕上的操作期間。 例如touchend事件,是在你