移动端弹窗滚动时window窗体也一起滚动的解决办法
在做移动端项目的时候发现,如果弹窗的内容很多很长,在滑动弹窗时,蒙层下面的window窗体也会跟着一起滚动,这样带来很差的视觉体验:
当时也想了很多办法,比如判断滑动的元素,如果是弹窗里面的元素则禁止window的滚动,如果不是,则window可以滚动
虽然在滑动弹窗的时候window体不滚动,但是当滑到弹窗边缘的时候,window体依然滚动,后来小组长想出了一个办法
即:在弹出弹窗的时候,设置window最外层定位为fixed,这样window便不会滚动了,在关闭弹窗的时候,设置window体定位为static,window便可重新滚动。
代码如下:
HTML代码:
<div class="demo">
<div class="btn">点击弹出弹窗</div>
<p class="bottom-elem">底部元素</p>
</div>
<div class="dialog-wrap">
<div class="dialog">
<div class="close-btn">点击关闭弹窗</div>
<p class="dialog-bottom">底部元素</p>
</div>
<div class="layer"></div>
</div>
CSS代码:
.btn{
width: 180px;
height: 40px;
background: #ff6677;
text-align: center;
line-height: 40px;
}
.bottom-elem{
margin-top: 1500px;
}
.dialog-wrap{
display: none;
position: fixed;
width: 100%;
height: 100%;
top:;
left:;
z-index:;
}
.dialog{
position: absolute;
top: 50%;
left: 50%;
width: 450px;
height: 500px;
background: #fff;
transform: translate(-50%,-50%);
z-index:;
overflow: auto;
font-size: 26px;
}
.dialog-bottom{
margin-top: 500px;
}
.layer{
position: fixed;
top:;
left:;
width: 100%;
height: 100%;
background: rgba(0,0,0,.65);
z-index:;
}
.close-btn{
width: 150px;
height: 50px;
background: #e8db14;
text-align: center;
line-height: 50px;
font-size: 20px;
}
JS代码:
$('.btn').on('tap',function(){
$('.dialog-wrap').css('display','block');
$('.demo').css('position','fixed');
});
$('.close-btn').on('tap',function(){
$('.dialog-wrap').css('display','none');
$('.demo').css('position','static');
});
效果如图:


如上所示,无论弹窗滑到顶部还是底部,背景window窗体都不滑动。
虽然解决了问题,但是这样的写法有点投机取巧,后续需要想想更周全更高级的方法。
by新手小白的记录
移动端弹窗滚动时window窗体也一起滚动的解决办法的更多相关文章
- EasyUI刚加载时候Window窗体自动弹出的解决办法
- 重装Oracle时出现SID已存在问题的解决办法
重装Oracle时出现SID已存在问题的解决办法 手机打开 注意安装oracle服务器的环境,不稳定导致数据库出现问题,后果很严重! 方法如下: 1.开始->设置->控制面板-&g ...
- MarkdownPad2弹窗显示HTML Rendering Error(HTML 渲染错误)的解决办法
MarkdownPad2弹窗显示HTML Rendering Error(HTML 渲染错误)的解决办法 我在打开.md文件的时候,出现以下错误: 解决方式:下载Awesomium SDK并安装,重启 ...
- VMware下ubuntu与win8共享文件时/mnt/hgfs目录为空的解决办法
VMware下ubuntu(guest)与win8共享文件时/mnt/hgfs目录为空的解决办法 环境:VMware-player-5.0.2-1031769 + ubuntu13.04 1.安装vm ...
- vs调试windows mobile程序时布署时间太长的解决办法
vs调试windows mobile程序时布署时间太长的解决办法 1.VS平台上,选工具-选项-项目和解决方案-MS BUILD项目生成输出详细信息中选择“诊断”,目的是在调试窗口中看出哪个过程编译的 ...
- 向SDE图层中添加大量数据时,出现ORA-00604以及ORA-01000的解决办法
转自原文 向SDE图层中添加大量数据时,出现ORA-00604以及ORA-01000的解决办法 写了一个小程序,从一个列表中读取坐标串,每个坐标串生成一个IPolygon,然后将这些Polygon添加 ...
- installshield制作的安装包卸载时提示重启动的原因以及解决办法
原文:installshield制作的安装包卸载时提示重启动的原因以及解决办法 有时候卸载installshield制作的安装包程序,卸载完会提示是否重启电脑以完成所有卸载,产生这个提示的常见原因有如 ...
- 执行Git命令时出现各种 SSL certificate problem 的解决办法
执行Git命令时出现各种 SSL certificate problem 的解决办法 来源 https://www.cnblogs.com/chenzc/p/5842932.html 比如我在win ...
- FW 执行Git命令时出现各种 SSL certificate problem 的解决办法
比如我在windows下用Git clone gitURL 就提示 SSL certificate problem: self signed certificate 这种问题,在windows下出现 ...
随机推荐
- json格式转化
python: json.dumps() : dict转成str json.loads():str转成dict (去除字符串eva() ) JS: JSON.parse(text[, reviver ...
- 从C到C++ (1)
从C到C++ 一. bool类型 bool取值false和true,是0和1的区别: false可以代表0,但true有很多种,并非只有1. 二. const限定符 常量在定义后就不能修改,所以定义时 ...
- JDBC剖析篇(1):java中的Class.forName()
一.Class.forName() 在Java中我们一般用下面这样的语句来连接数据库(以MySQL为例) Class.forName("com.mysql.jdbc.Driver" ...
- adb 命令模拟按键事件
转自:http://blog.csdn.net/jlminghui/article/details/39268419 例子:adb shell input keyevent 4 #这条命令相当于按了设 ...
- ES5新增数组方法(2):map
通过指定函数处理数组的每个元素,并返回处理后的数组. 1.计算数组中每个元素的平方 let arr = [1, 2, 3, 4, 5, 6]; let newArr = arr.map(item =& ...
- Windows下nginx作为静态资源服务器使用
一.Nginx下载与安装 1.nginx官方下载地址:http://nginx.org/ 2.下载完后将压缩包解压即可 3.nginx配置文件为根目录下conf\nginx.conf 二.Nginx常 ...
- PHP二维数组按某个键值排序
$data=Array( [0] => Array ( [id] => 2 [user_id] => 14 ...
- Lua工具类
1.打印table --一个用以打印table的函数 function print_r (t, name) print(pr(t,name)) end function pr (t, name, in ...
- Halcon17无法加载"hdevenginecpp":找不到指定的模块
Halcon17无法加载"hdevenginecpp":找不到指定的模块 在C#和Halcon17混合编程中,当执行private HDevEngine MyEngine = ne ...
- day-13 python库实现简单非线性回归应用
一.概率 在引入问题前,我们先复习下数学里面关于概率的基本概念 概率:对一件事发生的可能性衡量 范围:0<=P<=1 计算方法:根据个人置信区间:根据历史数据:根据模拟数据. 条件概率:B ...