function Dialog(options) {
    var defaults = {
        // 默认值。
        title: '',       // 标题文本,若不想显示title请通过CSS设置其display为none
        type: 'text',    // id,img,iframe,url,text
        content: '',     // 要显示的内容
        showTitle: true,     // 是否显示标题栏。
        closeText: '关闭',  // 关闭按钮文字,若不想显示关闭按钮请通过CSS设置其display为none
        closeClass: '',
        buttons: null,     //按钮,
        topOffset: 0,
        padding: 0,
        //width: 250,
        //height: 100,
        position: "center",  // 弹出框位置  'center', 'left', 'right', 'top', 'bottom',
        draggable: false,    // 是否移动
        modal: true,         // 是否是模态对话框
        fixed: false,         // 是否跟随页面滚动。
        time: 0,             // 自动关闭时间,为0表示不会自动关闭。
        id: false,            // 对话框的id,若为false,则由系统自动产生一个唯一id。
        transparent: false
    };
    options = $.extend(defaults, options);
    options.id = options.id ? options.id : 'dialog-' + Dialog.__count; // 唯一ID
    var overlayId = options.id + '-overlay'; // 遮罩层ID
    var timeId = null; // 自动关闭计时器
    var isShow = false;
    var isIe = /msie/.test(navigator.userAgent.toLowerCase());
    var isIe6 = 'undefined' == typeof (document.body.style.maxHeight);
    var self = this;

    /* 对话框的布局及标题内容。*/

    var wrapper = $("<div class=\"wrapper\" style=\"position:relative; overflow:hidden; text-align:left;\">");
    if (options.width) {
        wrapper.width(options.width);
    }
    if (options.height) {
        wrapper.height(options.height);
    }
    if (options.background) {
        wrapper.css("background", options.background);
    }

    var dialog = $('<div id="' + options.id + '" class="dialog"></div>').hide();
    if (options.transparent) {
        dialog.addClass("transparent");
        options.showTitle = false;
    }

    var bar = null;
    if (options.showTitle == false) {
        bar = $('<a href="javascript:;" title="Close" class="close ' + options.closeClass + '"></a>');
        bar.css('z-index', ++Dialog.__zindex);
        dialog.append(bar);
    } else {
        bar = $('<div class="bar"><span class="title">' + options.title + '</span><a class="close ' + options.closeClass + '">' + options.closeText + '</a></div>');
        if (options.draggable) {
            bar.css({ cursor: "move" });
        }
        wrapper.append(bar);
    }

    wrapper.append('<div class="content"></div>');
    if (options.padding > 0) {
        $(".content", wrapper).css("padding", options.padding + "px");
    }

    var buttons = $('<div class="buttons"></div>');

    if (options.buttons != null) {
        $(options.buttons).each(function () {
            var item = this;
            var button = $('<input type="button" class="w-btn">');
            button.val(item.name);
            if (item.handler) {
                button.click(function () {
                    item.handler(item.name, self);
                });
            }
            buttons.append(button);
        });
        wrapper.append(buttons);
    }

    dialog.append(wrapper);
    $('body').append(dialog);

    /**
    * 重置对话框的位置。
    *
    * 主要是在需要居中的时候,每次加载完内容,都要重新定位
    *
    * @return void
    */
    var resetPos = function () {
        if (typeof options.position == 'string') {
            switch (options.position.toLowerCase()) {
                case 'center':
                    var left = ($(window).width() - dialog.width()) / 2;
                    var top = ($(window).height() - dialog.height()) / 2;
                    if (!isIe6 && options.fixed) {
                        dialog.css({ top: top + options.topOffset, left: left });
                    } else {
                        dialog.css({ top: top + $(document).scrollTop() + options.topOffset, left: left + $(document).scrollLeft() });
                    }
                    break;
            }
        } else if (typeof options.position == 'object') {
            dialog.css({ left: options.position[0], top: options.position[1] });
        }
    };

    /**
    * 初始化位置及一些事件函数。
    *
    * 其中的this表示Dialog对象而不是init函数。
    */
    var init = function () {
        /* 是否需要初始化背景遮罩层 */
        if (options.modal) {
            $('body').append('<div id="' + overlayId + '" class="dialog-overlay"></div>');
            $('#' + overlayId).css({
                'left': 0, 'top': 0,
                /*'width':$(document).width(),*/
                'width': '100%',
                /*'height':'100%',*/
                'height': $(document).height(),
                'z-index': ++Dialog.__zindex,
                'position': 'fixed'
            }).hide();
        }

        dialog.css({ 'z-index': ++Dialog.__zindex, 'position': options.fixed ? 'fixed' : 'absolute' });

        /*  IE6 兼容fixed代码 */
        if (isIe6 && options.fixed) {
            dialog.css('position', 'absolute');
            resetPos();
            var top = parseInt(dialog.css('top')) - $(document).scrollTop();
            var left = parseInt(dialog.css('left')) - $(document).scrollLeft();
            $(window).scroll(function () {
                dialog.css({ 'top': $(document).scrollTop() + top, 'left': $(document).scrollLeft() + left });
            });
        }

        /* 以下代码处理框体是否可以移动 */
        var mouse = { x: 0, y: 0 };
        function moveDialog(event) {
            var e = window.event || event;
            var top = parseInt(dialog.css('top')) + (e.clientY - mouse.y);
            var left = parseInt(dialog.css('left')) + (e.clientX - mouse.x);
            dialog.css({ top: top, left: left });
            mouse.x = e.clientX;
            mouse.y = e.clientY;
        };

        dialog.find('.bar').mousedown(function (event) {
            if (!options.draggable) { return; }

            var e = window.event || event;
            mouse.x = e.clientX;
            mouse.y = e.clientY;
            $(document).bind('mousemove', moveDialog);
        });

        $(document).mouseup(function () {
            $(document).unbind('mousemove', moveDialog);
        });

        /* 绑定一些相关事件。 */
        dialog.find('.close').bind('click', this.close);
        dialog.bind('mousedown', function () { dialog.css('z-index', ++Dialog.__zindex); });

        // 自动关闭
        if (0 != options.time) { timeId = setTimeout(this.close, options.time); }
    };

    this.getDialogObj = function () {
        return dialog;
    };

    /**
    * 设置对话框的内容。
    *
    * @param string c 可以是HTML文本。
    * @return void
    */
    this.setContent = function (c) {
        var div = dialog.find('.content');
        switch (c.type.toLowerCase()) {
            case 'id': // 将ID的内容复制过来,原来的还在。
                div.html($('#' + c.content).html());
                if (c.onLoad) {
                    c.onLoad.apply(self);
                }
                break;
            case 'img':
                div.html('<div class="loading"><img src="/images/loading.gif">加载中...</div>');
                $('<img alt="" />').load(function () { div.empty().append($(this)); resetPos(); })
                    .attr('src', c.content);
                if (c.onLoad) {
                    c.onLoad.apply(self);
                }
                break;
            case 'url':
                div.html('<div class="loading"><img src="/images/loading.gif">加载中...</div>');
                $.ajax({
                    url: c.content,
                    success: function (html) {
                        div.html(html);
                        resetPos();
                        if (c.onLoad) {
                            c.onLoad.apply(self);
                        }
                    },
                    error: function () {
                        div.html('出错啦');
                        if (c.onLoad) {
                            c.onLoad.apply(self);
                        }
                    }
                });
                break;
            case 'iframe':
                var iframe = $('<iframe frameborder="0" src="' + c.content + '" style="border:0px;display: block;" />');
                iframe.load(function () {
                    iframe.width(options.width);
                    iframe.height(options.height - bar.outerHeight());
                    resetPos();
                    if (c.onLoad) {
                        c.onLoad.apply(self);
                    }
                });
                div.append(iframe);
                break;
            case 'text':
                div.html(c.content);
                if (c.onLoad) {
                    c.onLoad.apply(self);
                }
                break;
            default:
                div.html(c);
                if (c.onLoad) {
                    c.onLoad.apply(self);
                }
                break;
        }
    };   /**
    * 显示对话框
    */
    this.show = function () {
        /* 是否显示背景遮罩层 */
        if (options.modal) {
            $('#' + overlayId).show();
        }

        dialog.fadeIn(500, function () {
            if (options.onShow) {
                options.onShow.apply(self);
            }
            isShow = true;
        });
        // 自动关闭
        if (0 != options.time) {
            timeId = setTimeout(this.close, options.time);
        }

        resetPos();
    };

    /**
    * 隐藏对话框。但并不取消窗口内容。
    */
    this.hide = function () {
        if (!isShow) { return; }

        dialog.fadeOut('slow', function () {
            if (options.onHide) {
                options.onHide.apply(self);
            }
        });

        if (options.modal) {
            $('#' + overlayId).fadeOut('slow');
        }

        isShow = false;
    };

    /**
    * 关闭对话框
    *
    * @return void
    */
    this.close = function () {
        dialog.fadeOut('slow', function () {
            if (options.onClose) {
                options.onClose.apply(self);
            }
            $(this).remove();
            isShow = false;
        });
        if (options.modal) {
            $('#' + overlayId).fadeOut('slow', function () {
                $(this).remove();
            });
        }
        clearTimeout(timeId);
    };

    init.call(this);
    this.setContent(options);

    Dialog.__count++;
    Dialog.__zindex++;
}
Dialog.__zindex = 900;
Dialog.__count = 1;
Dialog.version = '1.0';

jquery Dialog弹框插件的更多相关文章

  1. jquery Dialog弹框插件使用

    var dialog = new Dialog({ title: '购物车', type: 'url', width: 520, content: "Uplolo.aspx", s ...

  2. 解决 jquery dialog 弹框destroy销毁方法不能把弹出元素设置成初始状态

    在使用jquery ui中的dialog弹出窗口的时候遇到一个问题,就是页面弹出窗口关闭后希望表单元素能回到初始状态 例如文本框输入内容后关闭dialog后里面的内容清除,使用了destroy方法也不 ...

  3. jQuery Dialog弹出层对话框插件

    Dialog.js的相关注释已经添加,可以按照注释,进行相关样式的修改,适用于自定义的各个系统! dialog.js /** * jQuery的Dialog插件. * * @param object ...

  4. 自己写的基于bootstrap风格的弹框插件

    自己写的一款基于bootstrap风格的弹框插件,暂时只有确认框.提示框.后续功能扩展.bug修改再更新. ;(function($){ //默认参数 var PARAMS; var DEFAULTP ...

  5. 非常强大的jQuery万能浮动框插件

    支持hover, click, focus以及无事件触发:支持多达12种位置的定位,出界自动调整:支持页面元素加载,Ajax加载,下拉列表,提示层效果,tip类效果等:可自定义装载容器:内置UI不错的 ...

  6. jQuery实现搜索框插件+豆瓣音乐接口实现豆瓣搜索框

    jQuery实现搜索框插件 豆瓣音乐接口实现豆瓣搜索框 豆瓣接口有时不稳定,网络请求会报400,不要惊慌.我主要是练习一下jQuery的JSONP和封装插件. <div class=" ...

  7. 基于jQuery消息提示框插件Tipso

    今天要分享的这款jQuery消息提示框插件名叫Tipso,它的特点是可以定义提示框的显示位置,以及动态改变提示框的提示内容,应该说是一款相当灵活的jQuery消息提示框插件.效果图如下: 在线预览   ...

  8. vue项目中使用vue-layer弹框插件

    vue-layer弹框插件  安装 npm i --save vue-layer 引用 import layer from 'vue-layer' Vue.prototype.$layer = lay ...

  9. jQuery下拉框插件8种效果

    jQuery自定义漂亮的下拉框插件8种效果 jquery美化选择器实例有:边框.下划线. 伸缩 .滑动. 覆盖. 旋转. 弹出层选择 .环形效果. 在线预览 <body class=" ...

随机推荐

  1. 使Eclipse下支持编写HTML/JS/CSS/JSP页面的自动提示

    1.打开eclipse→Windows→Preferences→Java→Editor→Content Assist 修改Auto Activation triggers for java的值为:zj ...

  2. 洛谷 [P1402] 酒店之王

    有两个约束条件的二分图匹配 我们回忆一下二分图匹配的匈牙利算法的具体流程,它是通过寻找增广路来判断最大匹配数的,我们再观察一下题目中的两个条件,只有两个条件都满足,才算找到一条增广路,所以我们可以分别 ...

  3. css模板

    最近好多人问我博客的css模板.... 现在是高三,没多少时间,趁放假赶紧更一下 主体就是把博客园的一个模板改动了一点 上面的图片特效,也是从别人那里得到的代码,大致就是下面那些,下面的三个图片换成自 ...

  4. BZOJ 1778: [Usaco2010 Hol]Dotp 驱逐猪猡 [高斯消元 概率DP]

    1778: [Usaco2010 Hol]Dotp 驱逐猪猡 题意:一个炸弹从1出发p/q的概率爆炸,否则等概率走向相邻的点.求在每个点爆炸的概率 高斯消元求不爆炸到达每个点的概率,然后在一个点爆炸就 ...

  5. POJ 3689 Apocalypse Someday [数位DP]

    Apocalypse Someday Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 1807   Accepted: 87 ...

  6. ORM规约变更经典案例---mysql军规

    先介绍一下<MySQL数据库开发的三十六条军规>,这里只介绍核心的,具体内容大家可以自行百度,这是从底层开发人员到管理者必须知道规范.出自58赶集. 写在前面的话: 总是在灾难发生后,才想 ...

  7. ES6 学习笔记之一 块作用域与let和const

    ---恢复内容开始--- 在学习ES6的块作用域和 let.const 之前,我们先来看看ES5以前的 var 关键字. var 关键字用于定义一个变量,通常我们会将其与变量的赋值合并为一条语句,就像 ...

  8. PhpStorm使用之 —— Xdebug断点调试

    PhpStorm使用之 -- Xdebug断点调试 在<XAMPP的配置与使用>中已经阐述了Xdebug插件的配置,Xdebug配置完成后,只需要在IDE工具中进行相关设置,便可启动Xde ...

  9. LINUX服务器下用root登录ftp

    因为安全方面的原因,root用户是默认不能登录ftp服务的. 如果一定要用root登录,则: 1.删除或注释/etc/vsftpd.ftpusers中的root 2.删除或注释/etc/vsftpd. ...

  10. ASP.NET Core 2.0 : 五.服务是如何加载并运行的, Kestrel、配置与环境

    "跨平台"后的ASP.Net Core是如何接收并处理请求的呢? 它的运行和处理机制和之前有什么不同? 本章从"宏观"到"微观"地看一下它的 ...