当前位置: 首页 > Web前端 > HTML5

遮罩层弹出框页面滚动

时间:2023-04-06 00:02:01 HTML5

第一种情况比较简单,弹框和页面都不可滚动

这是一个盒子

这是一个盒子

这是一个盒子

.mask{位置:固定;顶部:0;左:0;z-指数:999;宽度:100%;高度:100%;显示:无;背景:rgba(0,0,0,.7);}.box{位置:绝对;顶部:50%;左:50%;转换:translate3d(-50%,-50%,0);填充:10px;背景:#fff;文本对齐:居中;}varoBtn=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端

这是一个盒子

这是一个盒子

这是一个盒子

这是一个盒子

这是一个盒子

这是一个盒子

这是一个盒子一个盒子

.mask{position:fixed;顶部:0;左:0;z-指数:999;宽度:100%;高度:100%;显示:无;背景:rgba(0,0,0,.7);}.box{位置:绝对;50%;左:50%;转换:translate3d(-50%,-50%,0);宽度:200px;高度:200px;填充:10px;溢出-y:滚动;;背景:#fff;文本对齐:居中;}varoBtn=document.getElementById("btn"),oMask=document.getElementById("mask"),oBox=document.getElementById("box"),oClose=document.getElementById("close");oBtn.onclick=()=>{oMask.style.display='块';document.body.style.height='100%';document.body.style.overflow='隐藏';document.documentElement.style.overflow='hidden'}oClose.onclick=()=>{oMask.style.display='none';document.body.style.height='自动';document.body.style.overflow='滚动';document.documentElement.style.overflow='scroll'}2.适用于移动端

这是一个盒子

这是一个盒子

这是一个盒子

这是一个盒子</h1>

这是一个盒子

这是一个盒子

这是一个盒子

这是一个盒子

.maskWrap{位置:固定;顶部:0;左:0;z-指数:999;宽度:100%;高度:100%;显示:无;}.mask{位置:绝对;顶部:0;左:0;底部:0;右:0;z-索引:1;背景色:rgba(0,0,0,.7);}.box{position:absolute;顶部:50%;左:50%;转换:translate3d(-50%,-50%,0);z-指数:2;宽度:200px;高度:200px;溢出-y:滚动;-webkit-overflow-scrolling:触摸;填充:10px;背景:#fff;文本对齐:居中;}varoBtn=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();});让startY=0;//记录滑动的起始坐标,用于判断滑动方向letstatus=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;lett=e.target||e.srcElement;letpy=e.targetTouches[0].pageY;letch=t.clientHeight;//内容可见高度letsh=t.scrollHeight;//内容滚动高度letst=t.scrollTop;//当前滚动高度//已经到了结尾头部并向上滑动以停止它if(st===0&&py>startY){//console.log(st+'/'+py+'/'+startY);e.preventDefault();}//已经到底部尽头向下滑动防止if((st===sh-ch)&&py{status=0;},false);3.适用于移动端和pc端varoBtn=document.getElementById("btn"),oMaskWrap=document.getElementById("maskWrap"),oMask=document.getElementById("mask"),oBox=document.getElementById("box"),oClose=document.getElementById("关闭");varisFixed=0;oBtn.onclick=()=>{oMaskWrap.style.display='block';isFixed=1;}oClose.onclick=()=>{oMaskWrap.style.display='none';isFixed=0;}varbodyEl=document.body;vartop=0;functionstopBodyScroll(isFixed){console.log(isFixed)if(isFixed){top=window.scrollY;bodyEl.style.position='固定';bodyEl.style.top=-top+'px';}else{bodyEl.style.position='';bodyEl.style.top='';window.scrollTo(0,顶部);//回到最初的顶部}}//window.onscroll=stopBodyScroll(isFixed);document.addEventListener("onscroll",function(e){stopBodyScroll(isFixed);})