• 模拟弹出框的遮盖层问题


    画页面过程中总后许多弹出框(例如alert,confirm,dialog)的需求,单浏览器自身的alert,confirm,dialog比较难看。一般那我都是自己用div写一个模拟弹出框,但是这里有一个大问题:模拟弹出框显示后,页面的其他部分还能点击操作。这容易造成误操作,我想要的效果是模拟弹出框显示后页面的其他部分都不能操作。最后我找到一种写遮盖层的方法。

    主要原理是利用页面主内容、遮盖层和弹出框z-index的大小进行控制。形象的说这三个部分就像三张纸,弹出框在最上面,遮盖层在中间,页面主内容在最下面。这样的话模拟弹出框显示后页面的其他部分都不能操作。代码如下

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>弹出模态对话框测试[IE6下测试通过]</title>
    
    <style type="text/css">
        .hideDlg
        {
            height:129px;width:368px;
            display:none;
        }
        .showDlg
        {
            background-color:#ffffdd;
            border-width:3px;
            border-style:solid;
            height:129px;width:368px;
            position: absolute; 
            display:block;
            z-index:5;
        }
        .showDeck {
            display:block;
            top:0px;
            left:0px;
            margin:0px;
            padding:0px;
            width:100%;
            height:100%;
            position:absolute;
            z-index:3;
            background:#cccccc;
        }
        .hideDeck 
        {
            display:none;
        }
    </style>
    
    <script type="text/javascript">
        function showDlg() {
            //显示遮盖的层
            var objDeck = document.getElementById("deck");
            if (!objDeck) {
                objDeck = document.createElement("div");
                objDeck.id = "deck";
                document.body.appendChild(objDeck);
            }
            objDeck.className = "showDeck";
            objDeck.style.filter = "alpha(opacity=50)";
            objDeck.style.opacity = 40 / 100;
            objDeck.style.MozOpacity = 40 / 100;
            //显示遮盖的层end
    
            //禁用select
            hideOrShowSelect(true);
    
            //改变样式
            document.getElementById('divBox').className = 'showDlg';
    
            //调整位置至居中
            adjustLocation();
    
        }
    
        function cancel() {
            document.getElementById('divBox').className = 'hideDlg';
            document.getElementById("deck").className = "hideDeck";
            hideOrShowSelect(false);
        }
    
        function hideOrShowSelect(v) {
            var allselect = document.getElementsByTagName("select");
            for (var i = 0; i < allselect.length; i++) {
                //allselect[i].style.visibility = (v==true)?"hidden":"visible";
                allselect[i].disabled = (v == true) ? "disabled" : "";
            }
        }
    
        function adjustLocation() {
            var obox = document.getElementById('divBox');
            if (obox != null && obox.style.display != "none") {
                var w = 368;
                var h = 129;
                var oLeft, oTop;
    
                if (window.innerWidth) {
                    oLeft = window.pageXOffset + (window.innerWidth - w) / 2 + "px";
                    oTop = window.pageYOffset + (window.innerHeight - h) / 2 + "px";
                }
                else {
                    var dde = document.documentElement;
                    oLeft = dde.scrollLeft + (dde.offsetWidth - w) / 2 + "px";
                    oTop = dde.scrollTop + (dde.offsetHeight - h) / 2 + "px";
                }
    
                obox.style.left = oLeft;
                obox.style.top = oTop;
            }
        }
        
    </script>
    
    </head>
    
    <body onresize="adjustLocation();">
        <input type="button" value="click me" onclick="showDlg();" size="10px" /><br/>
        <input type="text" value="" size="10px" /><a href="http://www.baidu.com" target="_blank">百度</a><br/>
        <select>
            <option selected="selected">1</option>
            <option>2</option>
        </select><br/>
        
        <div id="divBox" class="hideDlg" style="" >
                <table width="100%" style="height:100%;  100%;" id="table1">
                        <tr>
                            <td style="height: 20px; text-align: center;" colspan="3">请输入用户名及密码</td>
                        </tr>
                        <tr>
                            <td>用户名</td>
                            <td>
                                <input name="TextBox1" type="text" id="TextBox1" />
                            </td>
                            <td></td>
                        </tr>
                        <tr>
                            <td>密码</td>
                            <td>
                                <input name="TextBox2" type="text" id="TextBox2" /></td>
                            <td></td>
                        </tr>
                        <tr>
                            <td></td>
                            <td>
                                <input type="button" name="Button1" value="Login" id="Button1" size="10" onclick="alert(TextBox1.value)"/>&nbsp;&nbsp;
                                <input type="button" name="Button2" value="Cancel" id="Button2" size="10" onclick="cancel();" />
                                </td>
                            <td>&nbsp;</td>
                        </tr>
                </table>
        </div>
    
    </body>
    </html>

    这里我还想说个问题:.showDeck {height:100%;}

    我一直以为body的子元素div属性height:100%;是包含了滚动条下面的内容,结果事实告诉我height:100%;只是浏览器窗口的高度。

  • 相关阅读:
    HDU.4352.XHXJ's LIS(数位DP 状压 LIS)
    AGC 015C.Nuske vs Phantom Thnook(思路 前缀和)
    window下域名解析系统DNS诊断命令nslookup详解
    Nginx入门篇-基础知识与linux下安装操作
    物理服务器Linux下软RAID和UUID方式挂载方法--Megacli64
    Linux下进程与线程的区别及查询方法
    Linux系统下DNS主从配置详解
    CactiEZ中文解决方案和使用教程
    关于MyBase 7.0 破解的方法
    git分支与合并(3)
  • 原文地址:https://www.cnblogs.com/xiang1336/p/3472513.html
Copyright © 2020-2023  润新知