html 弹窗禁止页面滑动,JS - 弹出自定义层时,阻止触摸事件造成页面滚动(H5移动开发)...

使用H5进行移动App开发时,常常会需要使用自定义的div层来实现一些弹出窗口。比如下面样例,点击“删除”按钮后,会弹出个确认框(其实就是个div)。同时为了让效果更好,后面还加了半透明的黑色背景遮罩层。

b688dca5bf05cede31482f984b3dcbdd.png          

fc19c4bb40f518b290c3d7f82497db58.png

问题描述:

但如果这个页面太长,原来就有滚动条。那么消息框弹出后,我们还是可以通过手指上下拖动页面。用户体验不好。

4de43fbd4e3a0e40372f61a31c11c607.png

问题解决:

我们在页面上添加一个触摸移动(touchmove)监听,当在消息框弹出的状态下,阻止触摸事件。这样就让这个消息框变成模态窗口,不管如何拖动,整个页面都是不会移动的。

完整代码:

(高亮处是触摸相关的关键代码)

自定义弹出框

*{

font-size: 1rem;

}

.bg {

display: none;

position: absolute;

top: 0%;

left: 0%;

width: 100%;

height: 100%;

background-color: black;

z-index: 1001;

-moz-opacity: 0.7;

opacity: .70;

filter: alpha(opacity=70);

}

.infobox_bg {

display: none;

position: absolute;

padding: 8px;

border: 8px solid #E8E9F7;

background-color: white;

z-index: 1002;

overflow: auto;

-moz-border-radius: 15px;

-webkit-border-radius: 15px;

border-radius: 15px;

box-sizing: border-box;

}

.infobox_title {

width: 100%;

height: 44px;

line-height: 44px;

text-align: center;

border-bottom: 1px solid #d9d9d9;

color: #e58d05;

font-size: 1.1rem;

background: #f4f5f6;

border-radius: 5px 5px 0 0;

background-color: white;

}

.infobox_button{

width: 100%;

padding: 3% 0;

font-size: 1.1rem;

color: #ffffff;

background: #49BDCE;

text-align: center;

border-radius: 5px;"

}

.infobox_button:hover{

background: #1A8E9F;

}

//记录是否阻止滚动

var disableScroll = false;

//如果弹出对话框时,底层的视图就不让滚动了

document.addEventListener('touchmove', function(e) {

if(disableScroll){

e.preventDefault();

}

}, false);

//显示弹出框

function showInfoBox(){

//禁止滚动

disableScroll = true;

//设置背景遮罩的尺寸

var ch=document.documentElement.clientHeight;//屏幕的高度

var cw=document.documentElement.clientWidth;//屏幕的宽度

var bgWidth = Math.max(document.body.scrollWidth,cw);

var bgHeight = Math.max(document.body.scrollHeight,ch);

document.getElementById("bgMask").style.width = bgWidth+"px";

document.getElementById("bgMask").style.height = bgHeight+"px";

//设置消息弹出框位置(屏幕居中)

var st=document.documentElement.scrollTop||document.body.scrollTop;//滚动条距顶部距离

var sl=document.documentElement.scrollLeft||document.body.scrollLeft;//滚动条距左距离

var objH=document.getElementById("infoBox").style.height;//浮动对象的高度

var objW=document.getElementById("infoBox").style.width;//浮动对象的宽度

var objT=Number(st)+(Number(ch)-parseFloat(objH))/2;

var objL=Number(sl)+(Number(cw)-parseFloat(objW))/2;

document.getElementById("infoBox").style.left = objL+"px";

document.getElementById("infoBox").style.top = objT+"px";

//显示背景遮罩

document.getElementById("bgMask").style.display="block";

//显示消息弹出框

document.getElementById("infoBox").style.display="block";

}

//隐藏弹出框

function hideInfoBox(){

//允许滚动

disableScroll = false;

//隐藏背景遮罩

document.getElementById("bgMask").style.display="none";

//隐藏消息弹出框

document.getElementById("infoBox").style.display="none";

}

style="width:90%;border-style:solid;text-align:left;border-collapse:collapse;">

 条目  操作 这个是条目1 删除 这个是条目2 删除 这个是条目3 删除 这个是条目4 删除 这个是条目5 删除 这个是条目6 删除 这个是条目7 删除 这个是条目8 删除 这个是条目9 删除
确定要删除吗?

确定

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值