在做移动端的立即购买页面时,点击底部固定栏立即购买按钮需要弹出一个阴影遮罩,在遮罩顶部有一个固定在底部的页面,所以总共是3层页面:最底层浏览页->阴影遮罩页->最上层的立即购买选择规格数量页;效果如下图:
在次过程中遇到的一些问题以及解决方案总结如下:
问题1:阴影遮罩出现后底部的页面还可以滑动;
解决:在弹出遮罩的js里click事件中,给body加overflow:hidden的css属性;$("body").css("overflow","hidden");
问题2:页面向上滑动,阴影遮罩和阴影遮罩上的立即购买页面会随着往上移动;
解决:编写了如下函数计算页面移动的距离,让遮罩和立即购买页面也移动相应的距离,代码如下:
- function getScrollTop(){
- var scrollTop=0;
- if(document.documentElement&&document.documentElement.scrollTop){
- scrollTop=document.documentElement.scrollTop;
- }else if(document.body){
- scrollTop=document.body.scrollTop;
- }
- return scrollTop;
- }
写了一个简单的demo,代码如下:
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8">
- <meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" name="viewport">
- <title>阴影遮罩</title>
- <script src="js/jquery-1.11.1.min.js"></script>
- <style>
- body{
- padding:0px;
- margin:0px;
- }
- #back1{
- z-index: 99999;
- display: block;
- background: rgba(0, 0, 0, 0.498039);
- position: absolute;
- top: 0px;
- width: 100%;
- height: 100%;
- }
- .one{
- height:100px;
- width:100%;
- text-align: center;
- background-color:#fff;
- position:absolute;
- bottom:0px;
- display:none;
- position: absolute;
- bottom: 0;
- z-index: 9999999;
- }
- .one span{
- font-size:24px;
- display: inline-block;
- height:30px;
- width:30px;
- position: absolute;
- right: 18px;
- top: 0px;
- background-color: #ccc;
- }
- </style>
- </head>
- <body>
- <div id="back1" style="display: none; top: 0px;"></div>
- <div class="one"><p>这是遮罩上面的一层</p> <span class="xx">x</span></div>
- <div>阴影遮罩下面的页面</div>
- <br /><br /><br /><br /><br /><br />
- <div style="height:500px;width:200px;border:1px solid red;"></div>
- <div>阴影遮罩下面的页面</div>
- <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
- <div class="bottom" style="position:fixed;bottom:0px;height:50px;width:100%;background-color:#ccc;line-height: 50px; text-align: center;">点我出现遮罩</div>
- <script type="text/javascript">
- //获取页面上移的距离
- function getScrollTop(){
- var scrollTop=0;
- if(document.documentElement&&document.documentElement.scrollTop){
- scrollTop=document.documentElement.scrollTop;
- }else if(document.body){
- scrollTop=document.body.scrollTop;
- }
- return scrollTop;
- }
- $(".bottom").on("click",function(){
- $("#back1").css("top",getScrollTop()+'px');
- $("#back1").show();
- $(".one").css("bottom",-getScrollTop()+'px');
- $(".one").show();
- $("body").css("overflow","hidden");
- });
- $(".xx").on("click",function(){
- $("#back1").hide();
- $(".one").hide();
- $("body").css("overflow","auto");
- });
- </script>
- </body>
- </html>
至此,一个好用的弹出demo就完美收官啦!!
来源:https://www.cnblogs.com/lsongyang/p/9139831.html