码迷,mamicode.com
首页 > 其他好文 > 详细

初探弹出层的实现原理

时间:2014-12-26 16:25:29      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:

首先用几句话来描述一下实现过程,好有个思路嘛^^:(1)先创建一个div层将整个屏幕罩住(所谓的遮罩层),可设置该层的属性,例如透明度(2)在遮罩层内创建div来展示内容(这里暂时称为内容展示层),在该层就可以灵活的创建个人需要的HTML组件了。例如你在内容展示层中创建了一个iframe,嘿嘿,你就可以请求指定的URL并将其返回的内容呈现在这个iframe之中。

下面就赶紧来看看如何实现吧

1、先上HTML代码

    <body>
        <div>body content</div>
        <a href="javascript:void(‘打开弹出层‘);" onclick="openDialog();">打开弹出层</a>
    </body>

 

呵呵

2、上Javascript部分

看上去有点儿长^^

        <script>
            window.myLayers = {};
            myLayer = function(opts){
                //默认参数
                var params = {
                    width: 500,
                    height: 370,
                    title: 我的窗口,
                    btnWrapH: 37,
                    titleWrapH: 31,
                    opacity: 0,
                    mask: true,
                    okClick: function(){}
                }
                //设置参数
                opts = opts ? opts : {};
                this.mask = (opts.mask == true || opts.mask == false) ? opts.mask : params.mask;
                this.okClick = opts.okClick ? opts.okClick : params.okClick;
                this.url = opts.url ? opts.url : "";
                this.content = opts.content ? opts.content : null;
                this.width = opts.width ? opts.width : params.width;
                this.height = opts.height ? opts.height : params.height;
                this.title = opts.title ? opts.title : params.title;
                this.btnWrapH = opts.btnWrapH ? opts.btnWrapH : params.btnWrapH;
                this.titleWrapH = opts.titleWrapH ? opts.titleWrapH : params.titleWrapH;
                this.opacity = opts.opacity ? opts.opacity : params.opacity;
                this.id = opts.id ? opts.id : parseInt(Math.random()*10000); //设置ID

                var _top = window;
                while(_top && (_top.parent != _top.self) && _top.parent.frames.length == 0){
                    _top = _top.parent;
                }
            
                
                this.left =_top.document.documentElement.clientWidth && _top.document.body.clientWidth/2 - this.width/2;
                this.top = _top.document.documentElement.clientHeight && _top.document.body.clientHeight/2 - this.height/2;
                
                this.left = this.left < 0 ? 0 : this.left;
                this.top = this.top < 0 ? 0 : this.top;
                //保存,便于在方法之间引用
                myLayers[this.id] = this;
            };
            //核心方法
            myLayer.prototype.open = function(){
                //定义遮罩层
                var _maskDiv = "<div id=‘_maskDiv_"+this.id+"‘ style=‘position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: #ccc; margin: 0; opacity: "+this.opacity+"; filter: alpha(opacity="+(this.opacity*100)+");‘></div>"
                //按钮
                var _wrapBtn = "<div style=‘height: "+this.btnWrapH+"px; width: 100%; background-color: #20B2AA; position: relative;‘><a href=‘javascript:void(0);‘ onclick=‘myLayers[\""+this.id+"\"].cancelBtnClick(\""+this.id+"\");‘  style=‘float: right; display: inline-block; margin-right:10px; color: green;background-color: white; padding: 1px 10px; height: 27px;  margin-top: "+((this.btnWrapH - 29)/2)+"px; line-height: 27px; text-decoration: none;‘>关闭</a><a href=javascript:void(0); onclick=myLayers[\""+this.id+"\"].okBtnClick(\""+this.id+"\"); style=float: right;  display: inline-block; margin-right: 10px; color: green; padding: 1px 10px; margin-top: "+((this.btnWrapH - 29)/2)+"px; height: 27px; line-height: 27px; background-color: white; text-decoration: none;>确认</a></div>";
                //iframe
                var _iframe = "<iframe style=width: 100%; height: "+(this.height-(this.titleWrapH+10)-this.btnWrapH)+"px; background-color: white; overflow: auto;  src="+this.url+"  frameborder=0></iframe>";
                //content属性优先
                var _content = this.content ? this.content : _iframe;
                //内容展示层
                var _wrapIframe = "<div id=‘_wrapIframe_"+this.id+"‘ style=‘border: 1px solid #E0FFFF; position: absolute; left: "+this.left+"px; top: "+this.top+"px; margin: 0 auto; padding: 0; width: "+this.width+"px; height: "+this.height+"px; background-color: white;‘><h3 style=‘position: relative; margin: 0; padding: 5px 0 5px 10px; height: 31px; line-height: 31px; background-color: #20B2AA; overflow: hidden;‘><a style=‘height: "+this.titleWrapH+"px; line-height: "+this.titleWrapH+"px; float: right; top: 31px; margin-right: 20px; padding: 3px 10px; font-size: 17px;‘ href=‘javascript: void(0);‘ onclick=‘myLayers[\""+this.id+"\"].closeLayer(\""+this.id+"\");‘>关闭</a><span style=‘overflow: hidden;‘>"+this.title+"</span></h3><div style=‘width: 100%; height: "+(this.height-(this.titleWrapH+10)-this.btnWrapH)+"px;‘>"+_content+"</div>"+_wrapBtn+"</div>";
                
                var body = window.document.body;
                //是否显示遮罩层
                if(this.mask == true){
                    body.innerHTML = body.innerHTML + _maskDiv;
                }
                
                body.innerHTML = body.innerHTML + _wrapIframe;
            };
            //关闭
            myLayer.prototype.closeLayer = function(layerId){
                var _w = document.getElementById("_wrapIframe_"+layerId);
                _w.parentNode.removeChild(_w);
                var _m = document.getElementById("_maskDiv_"+layerId);
                _m && _m.parentNode.removeChild(_m);
            };
            //事件
            myLayer.prototype.okBtnClick = function(layerId){
                myLayers[layerId].closeLayer(layerId);
                myLayers[layerId].okClick();
            };
            
            myLayer.prototype.cancelBtnClick = function(layerId){
                myLayers[layerId].closeLayer(layerId);
            };
            //调用打开弹出层
            function openDialog(){
                var opts = {
                    opacity: 0.31,
                    title: 我的标题,
                    height: 430,
                    width: 560,
                    url: "layer.htm",
                    mask: true,
                    okClick: function(){
                        alert("我被执行了。OK,可以提交表单了。");
                    },
                    content: "<p style=‘color: red;‘><a href=‘javascript:void(\"打开弹出层\");‘ onclick=‘openDialog();‘>打开弹出层</a></p>"
                    
                }
                new myLayer(opts).open();
            }
            
        </script>

 以上就是全部代码

 仅仅是初探。

 附上执行档地址:http://www.zhaojz.com.cn/demo/layer.htm

初探弹出层的实现原理

标签:

原文地址:http://www.cnblogs.com/zhaojz/p/4186672.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!