zoukankan      html  css  js  c++  java
  • 关于页面中弹窗的定位问题

    在做运营活动页面的时候,有时候一些活动会有很多弹窗,而弹窗要定位在页面中央的位置,即对div进行水平垂直居中,这个并不难做

    运营活动通常要用zepto进行开发,轻便简洁,方便操作页面中的DOM,但是当用zepto中的show和hide来切换弹窗的时候便会出现问题

    这个问题我已经遇到过好几次了,之前想不通,后来才发现问题所在:

    HTML代码如下:

     1 <div class="button" id="button1">点击出现弹框1</div>
     2 <div class="button" id="button2">点击出现弹框2</div>
     3 
     4 <div class="dialog-wrap"> 
     5    <!-- 第一个弹窗 -->
     6     <div class="dialog" id="dialog1">
     7         <div>this is the first dialog</div>
     8     </div>
     9    <!-- 第二个弹窗 -->
    10     <div class="dialog" id="dialog2">
    11         <div>this is ths second dialog</div>
    12     </div> 
    13     <!-- 半透明蒙层 -->
    14     <div class="layer"></div>
    15 </div>

    css代码如下:

     1 .dialog-wrap{
     2    width: 100%;
     3    height: 100%;
     4    display: none;
     5    position: absolute;
     6    top: 0;
     7    left: 0;
     8 }
     9 .layer{
    10    width: 100%;
    11    height: 100%;
    12    position: absolute;
    13    top: 0;
    14    left: 0;
    15    background: rgba(0,0,0,.85);
    16    z-index: 999;
    17 }
    18 .dialog{  
    19    position: absolute;
    20    top: 50%;
    21    left: 50%;
    22    transform: translate(-50%,-50%);
    23    -webkit-transform:translate(-50%,-50%);
    24    z-index: 1000;    
    25 }
    26 #dialog1{
    27    width: 500px;
    28    height: 200px;
    29    border: 1px solid black;
    30    background: #fff;
    31    border-radius: 10px;
    32    text-align: center;
    33    line-height: 200px;
    34    font-size: 30px;
    35    display: none;
    36 }
    37 #dialog2{
    38    width: 500px;
    39    height: 300px;
    40    background: #fff;
    41    border-radius: 10px;
    42    line-height: 300px;
    43    text-align: center;
    44    font-size: 30px;
    45    display: none;
    46 }

    js代码如下所示:

     1 $('#button1').on('click',function(){
     2     $('.dialog-wrap').show();
     3     $('#dialog1').css('display','block');
     4 })
     5 $('#button2').on('click',function(){
     6     $('.dialog-wrap').show();
     7     $('#dialog2').show();
     8 })
     9 $('.layer').on('tap',function(){
    10     $('.dialog-wrap').hide();
    11     $('#dialog1').hide();
    12     $('#dialog2').hide();
    13 })

    对弹窗1和弹窗2的不同操作,第一个弹窗是 $('#dialog1').css('display','block');  第二个弹窗是  $('#dialog2').show();

    然后来看对应的效果:

            

    第一个弹窗在页面中央位置,而第二个弹窗却偏了很多

    以前我在写弹窗的切换时为了方便都是用的show和hide来实现,但是明明定位在中央的弹窗在用了show之后却偏了,

    当时不明白为什么,只能在对应的弹窗中再加上下面的代码:margin-left:-250px;margin-top:-100px;  

    这样是有作用的,弹窗显示在页面中央,但是如果页面中有很多个弹窗,而且每个弹窗的大小样式都不一样时,这样就需要为每个弹窗单独定位,比较麻烦

    后来在调试控制台的时候,发现用了show的弹窗被自动加上了一些样式,如下所示:

    这才发现,原来元素在用了show之后,会被默认加上如上代码,而transform:scale(1,1)使元素显示的同时刚好覆盖住了我对弹窗设计的样式:transform: translate(-50%,-50%);

    所以弹窗才会偏,而用了  $('#dialog1').css('display','block');  就不会被覆盖。

    做了好几个活动之后终于发现问题所在啦,以后再也不用为每个弹窗单独定位了,鼓掌!!

  • 相关阅读:
    Mac-安装Git以及Git的配置
    Mac 安装Maven,并设置环境变量
    Mac Tab自动补全键
    Eclipse 代码快捷键模板(一)
    网易博客迁移(2011-05-27)
    前端JS插件整理
    Ajax请求二进制流并在页面展示
    IDE中使用System.getProperty()获取一些属性
    Spring Boot:快速入门(二)
    c 语言 指针 与地址
  • 原文地址:https://www.cnblogs.com/lynnmn/p/6144322.html
Copyright © 2011-2022 走看看