弹出框组件,可拖拽

论坛 期权论坛     
选择匿名的用户   2021-6-2 17:31   106   0
<div class="blogpost-body" id="cnblogs_post_body">
<div class="cnblogs_Highlighter">
  <pre class="blockcode"><code class="language-javascript">/**
* 弹出框组件
*/
(function($) {

    var Utils &#61; {
        showMask: function() {

            var $mask &#61; $(&#34;#mask&#34;);

            if( $mask.length &#61;&#61;&#61; 0 ) {
                $(&#39;body&#39;).prepend(&#34;&lt;div id&#61;&#39;mask&#39; class&#61;&#39;mask&#39;&gt;&lt;/div&gt;&#34;);
            }

            $(&#34;#mask&#34;).css({
                width: Math.max(document.documentElement.scrollWidth, document.documentElement.clientWidth),
                height: Math.max(document.documentElement.scrollHeight, document.documentElement.clientHeight)
            }).show();
        },
        setPosition: function(elem, options) {
            var defaults &#61; {target: null, offset: {left: 0, top: 0}, container: $(document.body), position: &#34;bottom&#34;},

                opts &#61; $.extend({}, defaults, options),

                left, top;

            if (null !&#61;&#61; opts.target) {
                var offset &#61; opts.target.offset(),

                    position &#61; opts.position;

                if (position &#61;&#61;&#61; &#34;left&#34;) {
                    left &#61; offset.left - elem.width();
                    top &#61; offset.top;

                } else if (position &#61;&#61;&#61; &#34;right&#34;) {
                    left &#61; offset.left &#43; opts.target.outerWidth();
                    top &#61; offset.top;

                } else if (position &#61;&#61;&#61; &#34;top&#34;) {
                    left &#61; offset.left;
                    top &#61; offset.top - elem.height();

                } else {
                    left &#61; offset.left;
                    top &#61; offset.top &#43; opts.target.outerHeight();
                }

                left &#43;&#61; opts.offset.left;
                top &#43;&#61; opts.offset.top;

            } else {
                var cwidth &#61; document.documentElement.clientWidth,

                    cheight &#61; document.documentElement.clientHeight,

                    width &#61; elem.width(),

                    height &#61; elem.height();

                left &#61; Math.max(0, (cwidth - width)/2) &#43; document.documentElement.scrollLeft &#43; document.body.scrollLeft;
                top &#61; Math.max(0, (cheight - height)/2) &#43; document.documentElement.scrollTop &#43; document.body.scrollTop;
            }

            elem.css({
                position: &#39;absolute&#39;,
                zIndex: &#39;101&#39;
            });
            elem.offset({
                left : left,
                top : top
            })
        },
        hideMask: function() {
            $(&#34;#mask&#34;).hide();
        }
    }

    /** dialog 全局静态变量定义 */
    var MASK_HOLD &#61; &#34;mask_hold&#34;;

    // 默认值
    var  defaults &#61; {
        // dialog ID
        id: &#39;labi-dialog&#39;,

        // 标题文字
        title: &#34;&#34;,

        // 关闭按钮文字
        closeText: &#39;关闭&#39;,

        // 内容区域
        content: &#39;&#39;,

        height: &#39;auto&#39;,

        width: 300,

        maxHeight: false,

        maxWidth: false,

        minHeight: 150,

        minWidth: 150,

        position: &#39;center&#39;,

        zIndex: 100,

        // dialog样式 宽高在该class中设定
        dialogClass: &#39;&#39;,

        // 是否可拖拽
        draggable: true,

        // 是否显示蒙板
        showMask: true,

        // 操作按钮
        // key为buttonValue value为fn
        buttons: {},

        // 按钮引导类型
        btnTypes: false,

        //按钮样式
        btnClassName:&#34;t-r&#34;,

        //按钮顶部虚线
        btnHasDashed : true,
        // 其它button面板元素
        otherButtonPaneElem: false,

        // 用来定位的目标对象
        target: null,

        // 是否需要点击dialog外部自动关闭
        autoClose: false,

        // dialog的容器 默认为body
        container: false,

        // 关闭dialog时的回调
        closeDialogCallback: false,

        // 是否显示关闭按钮
        showCloseButton: true,

        // 关闭窗口的时阻止的选项设置 传入要执行的方法
        stopCloseDialog:false,

        // 是否返回dialog实例 默认返回dialog DOM对象
        returnInstance: false,

        contentClass: &#34;&#34;,
        // 是否显示顶部提示
        topRemaind : false,
        // 是否显示顶部提示
        topRemaindHeightNumber : 1,
        //顶部提示内容
        topRemaindContainer : &#34;&#34;

    };

    /**
     * 弹出窗构造方法
     * &#64;description 样式改版
     * &#64;param options
     * &#64;return dialogDom 返回实例对象 链式调用
     */
    function Dialog(opts){

        this.selfId &#61; opts.id;
        this.dialogDom &#61; $(&#34;#&#34; &#43; opts.id);
        this.options &#61; opts;
        this.btnMap &#61; {};
        this._init();

        return this.options.returnInstance ? this : this.dialogDom;
    }

    /**
     * 弹出框实例原型扩展方法
     */
    $.extend(Dialog.prototype, {

        /**
         * 弹出框实例初始化方法
         */
        _init : function(){
            var self &#61; this;
            self._createDialog();
            self._instanceEvent();
        },

        /**
         * 创建实例DOM
         */
        _createDialog : fu
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP