`
黄继华
  • 浏览: 45892 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

jQuery弹出层插件Dialog

 
阅读更多
/**
* 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()

分享到:
评论

相关推荐

    jQuery弹出层插件大全

    除此之外,还有其他一些jQuery弹出层插件值得一提,例如jQuery Modal Dialog和jQuery UI。jQuery Modal Dialog是一个独立的插件,提供错误提示、自动关闭、显示/隐藏、关闭按钮、对话框标题和宽度等特性。jQuery UI...

    jQuery弹出层插件三种简单遮罩弹出框效果

    本文将深入探讨标题所提及的"jQuery弹出层插件三种简单遮罩弹出框效果",以及如何利用jQuery实现这些效果。 首先,让我们了解什么是弹出层和遮罩弹出框。弹出层(Popup Layer)是一种常见的网页交互设计,当用户...

    jQuery弹出层插件.rar

    《jQuery弹出层插件深度解析与应用》 在网页设计和开发中,弹出层是一种常见的交互元素,用于展示信息、提示用户或接收用户输入。jQuery作为一个强大的JavaScript库,为开发者提供了丰富的功能来实现这一需求。本篇...

    自己写的jquery 弹出层插件,可拖动

    文件名“jquery_dialog插件”可能就是这个弹出层插件的核心文件,可能包含CSS样式表、JavaScript脚本和可能的图像资源。通常,一个jQuery插件会包括一个主JS文件,用于定义插件的函数和行为;一个CSS文件,用于设置...

    Jquery弹出层插件

    JQuery弹出层插件是Web开发中常用的一种交互元素,用于显示临时信息或与用户进行更深入的交互。在网页设计中,弹出层能够有效地吸引用户的注意力,提供额外的功能,如信息提示、表单填写、图片预览等。JQuery作为一...

    jquery弹出层插件.zip

    jQuery弹出层插件通常用于创建弹出对话框、模态框或者提示信息,这些功能在网页应用中非常常见,能够提供更好的用户体验。下面将详细解释相关知识点。 1. **jQuery**: jQuery是由John Resig开发的,它的目标是使...

    jQuery弹出层 可移动层 提示框 浮动层

    《jQuery弹出层技术详解与应用实践》 在网页开发中,用户交互体验的重要性日益凸显,其中弹出层(Popup Layer)作为一种常见的交互元素,被广泛应用于提示信息、表单填写、图片预览等场景。jQuery,作为JavaScript...

    jquery dialog弹出层

    而jQuery UI则是在jQuery基础上扩展的一套交互式用户界面组件库,其中包括一个强大的对话框(Dialog)功能,即“jQuery dialog弹出层”。这个弹出层在网页应用中广泛用于创建模态或非模态警告、提示、确认或者更复杂...

    JQuery弹出层类库

    为了简化这个过程,许多开发者选择使用预封装的jQuery弹出层插件,如`jQuery UI Dialog`、`Bootstrap Modal`或者本文提及的"3K大小的万能jQuery弹出层类库146"。这些插件提供了预设的样式和行为,只需几行代码就能...

    jquery弹出层

    《jQuery弹出层技术详解与应用实践》 在网页设计中,弹出层是一种常见的交互方式,用于在不离开当前页面的情况下展示额外的信息或功能。jQuery作为一款强大的JavaScript库,提供了丰富的API和插件,使得实现弹出层...

    jQuery Dialog 弹出层对话框插件(可加载url地址)

    **jQuery Dialog弹出层对话框插件:深入解析与应用** jQuery Dialog是jQuery UI库中的一个组件,它提供了一种优雅的方式在网页上创建交互式的弹出层对话框。这个插件不仅允许用户展示信息,还可以加载外部URL内容,...

    jquery弹出层框架方便简单

    dialogs框架是一款基于jQuery的轻量级弹出层插件,它通过简单的API调用即可快速创建各种类型的弹出层效果。该框架的设计理念在于提供灵活多样的定制选项,使得开发者能够根据项目需求轻松调整弹出层的样式、行为以及...

    jQuery弹出层

    jQuery Popup,即基于jQuery的弹出层插件,能够帮助开发者快速实现各种类型的弹出效果,如模态对话框、提示框和下拉菜单等。 ### 1. 基本概念 - **模态对话框(Modal Dialog)**: 弹出层覆盖在页面内容之上,阻止...

    jQuery对话框Dialog弹出层插件演示与使用说明

    jQuery Dialog 是一个强大的弹出层插件,常用于创建各种对话框、提示窗口或模态框,极大地丰富了网页的交互体验。这个插件是基于 jQuery 库构建的,因此在使用前确保已经引入了 jQuery。下面将详细介绍如何使用 ...

    jQuery 弹出层及alert插件

    下面我们将深入探讨jQuery弹出层及alert插件的相关知识点。 一、jQuery弹出层基础 1. **jQuery Dialog**:jQuery UI库提供了Dialog组件,可以创建功能丰富的弹出窗口。Dialog支持多种配置选项,如自动打开、可拖动...

    jQuery弹出层播放视频

    在“jQuery弹出层播放视频”的场景下,通常会结合使用弹出层插件,例如jQuery UI的Dialog或者Bootstrap的Modal。这些弹出层组件可以将视频嵌入其中,当用户点击某个按钮或链接时,弹出层会出现并显示视频。这样既不...

    jquery 弹出层,点击链接弹出,不支持框架

    1. **寻找替代品**:有很多现代的jQuery弹出层插件可供选择,如Bootstrap Modal、Magnific Popup、Fancybox等。这些插件提供了更好的性能和更多的自定义选项,且持续维护更新。 2. **自定义实现**:如果你不希望...

    jquery弹出层需要的js

    对于"jquery弹出层需要的js"这个主题,我们将深入探讨如何利用jQuery来创建弹出层,并结合给定的文件名,了解相关的核心知识点。 首先,`jquery-3.1.1.min.js`是jQuery库的压缩版本,它是整个项目的基础。这个文件...

    jQuery弹出层/jQuery弹出窗口/_全集

    5. **插件应用**:jQuery生态系统中有许多现成的弹出层插件,如jQuery UI Dialog, Bootstrap Modal, SweetAlert2等,它们提供了丰富的配置选项和预设样式,可以快速实现专业级别的弹出层功能。 6. **响应式设计**:...

    Dialog基于jQuery弹出层对话框插件.zip

    Dialog基于jQuery弹出层对话框插件是一种广泛应用于网页交互中的组件,它允许开发者在页面上创建可定制的、交互式的对话窗口。该插件利用了JavaScript库jQuery的强大功能,结合CSS3技术,实现了丰富的动画效果和灵活...

Global site tag (gtag.js) - Google Analytics