摘要:第一種情況比較簡單,彈框和頁面都不可滾動第二種情況是彈框可滾動,頁面不可滾動移動端兼容性不好,可應用于端適用于移動端記錄開始滑動的坐標,用于判斷滑動方向未開始,已開始,滑動中核心部分判定一次就夠
第一種情況比較簡單,彈框和頁面都不可滾動
this is a box
this is a box
this is a box
.mask{ position: fixed; top: 0; left: 0; z-index: 999; width: 100%; height: 100%; display: none; background: rgba(0,0,0,.7); } .box{ position: absolute; top: 50%; left: 50%; transform: translate3d(-50%, -50%, 0); padding: 10px; background: #fff; text-align: center; }
var oBtn = document.getElementById("btn"), oMask = document.getElementById("mask"), oBox = document.getElementById("box"), oClose = document.getElementById("close"); oBtn.onclick = () => { oMask.style.display = "block"; } oClose.onclick = () => { oMask.style.display = "none"; } oMask.addEventListener("touchmove", (e) => { e.preventDefault(); });
第二種情況是彈框可滾動,頁面不可滾動
1.移動端兼容性不好,可應用于pc端
this is a box
this is a box
this is a box
this is a box
this is a box
this is a box
this is a box
.mask{ position: fixed; top: 0; left: 0; z-index: 999; width: 100%; height: 100%; display: none; background: rgba(0,0,0,.7); } .box{ position: absolute; top: 50%; left: 50%; transform: translate3d(-50%, -50%, 0); width: 200px; height: 200px; padding: 10px; overflow-y: scroll; -webkit-overflow-scrolling : touch; background: #fff; text-align: center; }
var oBtn = document.getElementById("btn"), oMask = document.getElementById("mask"), oBox = document.getElementById("box"), oClose = document.getElementById("close"); oBtn.onclick = () => { oMask.style.display = "block"; document.body.style.height = "100%"; document.body.style.overflow = "hidden"; document.documentElement.style.overflow="hidden" } oClose.onclick = () => { oMask.style.display = "none"; document.body.style.height = "auto"; document.body.style.overflow = "scroll"; document.documentElement.style.overflow="scroll" }
2.適用于移動端
this is a box
this is a box
this is a box
this is a box
this is a box
this is a box
this is a box
this is a box
.maskWrap{ position: fixed; top: 0; left: 0; z-index: 999; width: 100%; height: 100%; display: none; } .mask{ position: absolute; top: 0; left: 0; bottom: 0; right: 0; z-index: 1; background-color: rgba(0, 0, 0, .7); } .box{ position: absolute; top: 50%; left: 50%; transform: translate3d(-50%, -50%, 0); z-index: 2; width: 200px; height: 200px; overflow-y: scroll; -webkit-overflow-scrolling : touch; padding: 10px; background: #fff; text-align: center; }
var oBtn = document.getElementById("btn"), oMaskWrap = document.getElementById("maskWrap"), oMask = document.getElementById("mask"), oBox = document.getElementById("box"), oClose = document.getElementById("close"); oBtn.onclick = () => { oMaskWrap.style.display = "block"; } oClose.onclick = () => { oMaskWrap.style.display = "none"; } oMask.addEventListener("touchstart", (e) => { e.preventDefault(); }); let startY = 0; // 記錄開始滑動的坐標,用于判斷滑動方向 let status = 0; // 0:未開始,1:已開始,2:滑動中 // 核心部分 oBox.addEventListener("touchstart", e => { status = 1; startY = e.targetTouches[0].pageY; }, false); oBox.addEventListener("touchmove", e => { // 判定一次就夠了 if (status !== 1) return; status = 2; let t = e.target || e.srcElement; let py = e.targetTouches[0].pageY; let ch = t.clientHeight; // 內容可視高度 let sh = t.scrollHeight; // 內容滾動高度 let st = t.scrollTop; // 當前滾動高度 // 已經到頭部盡頭了還要向上滑動,阻止它 if (st === 0 && py > startY) { // console.log(st + "/" + py + "/" + startY); e.preventDefault(); } // 已經到低部盡頭了還要向下滑動,阻止它 if ((st === sh - ch) && py < startY) { // console.log(st + "/" + (sh - ch) + "/" + py + "/" + startY); e.preventDefault(); } }, false); oBox.addEventListener("touchend", e => { status = 0; }, false);
3.適用于移動端和pc端
var oBtn = document.getElementById("btn"), oMaskWrap = document.getElementById("maskWrap"), oMask = document.getElementById("mask"), oBox = document.getElementById("box"), oClose = document.getElementById("close"); var isFixed = 0; oBtn.onclick = () => { oMaskWrap.style.display = "block"; isFixed = 1; } oClose.onclick = () => { oMaskWrap.style.display = "none"; isFixed = 0; } var bodyEl = document.body; var top = 0; function stopBodyScroll (isFixed) { console.log(isFixed) if (isFixed) { top = window.scrollY; bodyEl.style.position = "fixed"; bodyEl.style.top = -top + "px"; } else { bodyEl.style.position = ""; bodyEl.style.top = ""; window.scrollTo(0, top); // 回到原先的top } } // window.onscroll = stopBodyScroll(isFixed); document.addEventListener("onscroll", function (e) { stopBodyScroll(isFixed); })
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/113757.html
摘要:當彈框彈出時原頁面內容不能滾動,即將樣式設為原頁面的內容就不會動了當彈框關閉后再將樣式改為默認的中的寫一個函數,再在彈框的中調用函數。彈出彈框 效果展示 實現原理 html結構比較簡單,即: 遮罩層 彈框 先寫覆蓋顯示窗口的遮罩層div.box,因為要在整個窗口顯示固定,所以position要設為fixed,background設為灰色半透明,由于要遮住整個顯示屏,...
摘要:第一種情況比較簡單,彈框和頁面都不可滾動第二種情況是彈框可滾動,頁面不可滾動移動端兼容性不好,可應用于端適用于移動端記錄開始滑動的坐標,用于判斷滑動方向未開始,已開始,滑動中核心部分判定一次就夠 第一種情況比較簡單,彈框和頁面都不可滾動 this is a box this is a box this is a box ...
摘要:移動端下彈框禁止背景滑動茴字寫法有很多種,找到最適合的才是好的。 移動端下彈框禁止背景滑動 茴字寫法有很多種,找到最適合的才是好的。 以下下方法在一屛之內是可行的 body;html 設置overflow:hidden .overflow-hidden{ height: 100%; overflow: hidden; } // 彈出時 $(html, body,.pa...
摘要:移動端下彈框禁止背景滑動茴字寫法有很多種,找到最適合的才是好的。 移動端下彈框禁止背景滑動 茴字寫法有很多種,找到最適合的才是好的。 以下下方法在一屛之內是可行的 body;html 設置overflow:hidden .overflow-hidden{ height: 100%; overflow: hidden; } // 彈出時 $(html, body,.pa...
閱讀 2851·2021-11-22 15:22
閱讀 19207·2021-09-22 15:00
閱讀 1440·2021-09-07 09:58
閱讀 1242·2019-08-30 13:01
閱讀 2428·2019-08-29 16:27
閱讀 2350·2019-08-26 13:25
閱讀 1624·2019-08-26 12:13
閱讀 943·2019-08-26 11:53