面向对象开发弹窗组件

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        *{ margin:0; padding:0;}
        .login{ background:white; border:1px #000 solid; position:absolute; left:0; top:0;}
        .title{ height:30px; background:gray; color:white;}
        .title .close{ float:right;}
    </style>
    <script type="text/javascript" src="res/js/jquery.min.js"></script>
    <script type="text/javascript" src="res/js/dialog.js"></script>
</head>
<body>
<input type="button" value="1">
<input type="button" value="2">
<input type="button" value="3">
<script>
    window.onload = function(){
        var aInput = document.getElementsByTagName('input');

        aInput[0].onclick = function(){

            drag({   //配置参数
                iNow : 0,
                title : '登录'
            });

        };

        aInput[1].onclick = function(){

            drag({   //配置参数
                iNow : 1,
                w : 100,
                h : 400,
                dir : 'right',
                title : '公告'
            });

        };


    };
</script>
</body>
</html>
;(function($, window, document,undefined) {
    function Dialog(){

        this.oLogin = null;

        this.settings = {   //默认参数
            w : 300,
            h : 300,
            dir : 'center',
            title : '',
            mark : false
        };

    }

    Dialog.prototype.json = {};

    Dialog.prototype.init = function( opt ){

        extend( this.settings , opt );


        if( this.json[opt.iNow] == undefined ){
            this.json[opt.iNow] = true;
        }


        if(this.json[opt.iNow]){
            this.create();
            this.fnClose();

            if(this.settings.mark){
                this.createMark();
            }

            this.json[opt.iNow] = false;

        }

    };

    Dialog.prototype.create = function(){

        this.oLogin = document.createElement('div');
        this.oLogin.className = 'login';
        this.oLogin.innerHTML = '<div class="title"><span>'+ this.settings.title +'</span><span class="close">X</span></div><div class="content"></div>';

        document.body.appendChild( this.oLogin );

        this.setData();
    };

    Dialog.prototype.setData = function(){

        this.oLogin.style.width = this.settings.w + 'px';
        this.oLogin.style.height = this.settings.h + 'px';

        if( this.settings.dir == 'center' ){
            this.oLogin.style.left =  (viewWidth() - this.oLogin.offsetWidth)/2 + 'px';
            this.oLogin.style.top =  (viewHeight() - this.oLogin.offsetHeight)/2 + 'px';
        }
        else if( this.settings.dir == 'right' ){
            this.oLogin.style.left =  (viewWidth() - this.oLogin.offsetWidth) + 'px';
            this.oLogin.style.top =  (viewHeight() - this.oLogin.offsetHeight) + 'px';
        }

    };

    Dialog.prototype.fnClose = function(){

        var oClose = this.oLogin.getElementsByTagName('span')[1];
        var This = this;

        oClose.onclick = function(){

            document.body.removeChild( This.oLogin );

            if(This.settings.mark){
                document.body.removeChild( This.oMark );
            }

            This.json[This.settings.iNow] = true;

        };

    };

    Dialog.prototype.createMark = function(){

        var oMark = document.createElement('div');
        oMark.id = 'mark';

        document.body.appendChild( oMark );

        this.oMark = oMark;

        oMark.style.width = viewWidth() + 'px';
        oMark.style.height = viewHeight() + 'px';

    };

    function extend(obj1,obj2){
        for(var attr in obj2){
            obj1[attr] = obj2[attr];
        }
    }

    function viewWidth(){
        return document.documentElement.clientWidth;
    }
    function viewHeight(){
        return document.documentElement.clientHeight;
    }

    window.drag=function(opt){
    var litdialog= new Dialog();
    litdialog.init(opt);

}
})(jQuery, window, document);
原文地址:https://www.cnblogs.com/yexiangwang/p/5416922.html