huangjihua
/**
* DialogUpdate
*
* @author    huang ji hua
* @copyright Copyright (C) 2012
* @license   FreeBSD license
*/
/**
* jQuery的Dialog插件。
*
* @param object content
* @param object options 选项。
* @return 
*/
function Dialog(content, options) {
    var defaults = { // 默认值。 
        title: \'标题\',       // 标题文本,若不想显示title请通过CSS设置其display为none 
        showTitle: true,     // 是否显示标题栏。
        closeText: \'[关闭]\', // 关闭按钮文字,若不想显示关闭按钮请通过CSS设置其display为none 
        draggable: true,     // 是否移动 
        modal: true,         // 是否是模态对话框 
        center: true,        // 是否居中。 
        fixed: true,         // 是否跟随页面滚动 true表示不滚动 false滚动。
        time: 0,             // 自动关闭时间,为0表示不会自动关闭。 
        id: false,            // 对话框的id,若为false,则由系统自动产生一个唯一id。
        dialogClass: \'meBan-box w-390\', //最外层div样式名称
        iframeAttr:\'scrolling="no"\',//iframe attr
        titleClass: \'\'//标题样式名称
       
    };
    var 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 = $.browser.msie;
    var isIe6 = $.browser.msie && (\'6.0\' == $.browser.version);
    /* 对话框的布局及标题内容。*/
    var barHtml = !options.showTitle ? \'\' :
	 \'<div class="hd"><b class="\'+ options.titleClass +\'">\' + options.title + \'</b> <a href="javascript:void(0)" class="close">\' + options.closeText + \'</a></div>\'
    dialog = $(\'<div id="\' + options.id + \'" class="\' + options.dialogClass + \'"><div class="borderg">\' + barHtml + \'<div class="content"></div></div>\').hide();
    $(\'body\').append(dialog);
    /**
    * 重置对话框的位置。
    *
    * 主要是在需要居中的时候,每次加载完内容,都要重新定位
    *
    * @return void
    */
    var resetPos = function () {
        /* 是否需要居中定位,必需在已经知道了dialog元素大小的情况下,才能正确居中,也就是要先设置dialog的内容。 */
        if (options.center) {
            var left = ($(window).width() - dialog.width()) / 2;
            var top = ($(window).height() - dialog.height()) / 2;
            if (!isIe6 && options.fixed)
            { dialog.css({ top: top, left: left }); }
            else
            { dialog.css({ top: top + $(document).scrollTop(), left: left + $(document).scrollLeft() }); }
        }
    }

    /**
    * 初始化位置及一些事件函数。
    *
    * 其中的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\': \'absolute\'
            })
                .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(\'.hd\').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 (event) {
            $(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); }
    }


    /**
    * 设置对话框的内容。 
    *
    * @param string c 可以是HTML文本。
    * @return void
    */
    this.setContent = function (c) {
        var div = dialog.find(\'.content\');
        if (\'object\' == typeof (c)) {
            switch (c.type.toLowerCase()) {
                case \'id\': // 将ID的内容复制过来,原来的还在。
                    div.html($(\'#\' + c.value).html());
                    break;
                case \'img\':
                    div.html(\'加载中...\');
                    $(\'<img alt="" />\').load(function () { div.empty().append($(this)); resetPos(); })
                    .attr(\'src\', c.value);
                    break;
                case \'url\':
                    div.html(\'加载中...\');
                    $.ajax({ url: c.value,
                        success: function (html) { div.html(html); resetPos(); },
                        error: function (xml, textStatus, error) { div.html(\'出错啦\') }
                    });
                    break;
                case \'iframe\':
                    div.append($(\'<iframe src="\' + c.value + \'" \' + options.iframeAttr + \'/>\'));
                    break;
                case \'text\': break;
                default:
                    div.html(c.value);
                    break;
            }
        }
        else
        { div.html(c); }
    }

    /**
    * 显示对话框
    */
    this.show = function () {
        if (undefined != options.beforeShow && !options.beforeShow())
        { return; }

        /**
        * 获得某一元素的透明度。IE从滤境中获得。
        *
        * @return float
        */
        var getOpacity = function (id) {
            if (!isIe)
            { return $(\'#\' + id).css(\'opacity\'); }

            var el = document.getElementById(id);
            return (undefined != el
                    && undefined != el.filters
                    && undefined != el.filters.alpha
                    && undefined != el.filters.alpha.opacity)
                ? el.filters.alpha.opacity / 100 : 1;
        }
        /* 是否显示背景遮罩层 */
        if (options.modal)
        { $(\'#\' + overlayId).fadeTo(\'slow\', getOpacity(overlayId)); }
        dialog.fadeTo(\'slow\', getOpacity(options.id), function () {
            if (undefined != options.afterShow) { options.afterShow(); }
            isShow = true;
        });
        // 自动关闭 
        if (0 != options.time) { timeId = setTimeout(this.close, options.time); }

        resetPos();
    }


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

        if (undefined != options.beforeHide && !options.beforeHide())
        { return; }

        dialog.fadeOut(\'slow\', function () {
            if (undefined != options.afterHide) { options.afterHide(); }
        });
        if (options.modal)
        { $(\'#\' + overlayId).fadeOut(\'slow\'); }

        isShow = false;
    }

    /**
    * 关闭对话框 
    *
    * @return void
    */
    this.close = function () {
        if (undefined != options.beforeClose && !options.beforeClose())
        { return; }

        dialog.fadeOut(\'slow\', function () {
            $(this).remove();
            isShow = false;
            if (undefined != options.afterClose) { options.afterClose(); }
        });
        if (options.modal)
        { $(\'#\' + overlayId).fadeOut(\'slow\', function () { $(this).remove(); }); }
        clearTimeout(timeId);
    }



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

    Dialog.__count++;
    Dialog.__zindex++;
}
Dialog.__zindex = 500;
Dialog.__count = 1;
Dialog.version = \'1.0 beta\';

function dialog(content, options) {
    var dlg = new Dialog(content, options);
    dlg.show();
    return dlg;
}

//调用方式:
new Dialog({type:\'url\',value:\'/dialog/videoplayer/"+shlf.InnerCode +"\'},{title:\'标题\',closeText:\'\',dialogClass:\'meBan-box w-670\'}).show()

分类:

技术点:

相关文章: