自制的超好用jQ插件,弹层,模态窗口插件2

没想到,我那个代码,自我感觉还可以,主管看了一眼就否定了,
说完全没有拓展性。他说他来改。然后变成这个样子了。这个代码的关键点是这个 return dialogObj;
下面是代码给大家分享下,看看插件是如何写的。

define(['jquery'], function($){
    "use strict";
    $.extend({
        /**
          * 属性类参数:
          * type: loading|msg(自定义HTML内容)
          * timeout: 超时自动关闭(毫秒)
          * title: 标题
          * content: 内容
          * class: 弹出框class
          * width: 弹出框宽度
          * height: 弹出框高度
          * style: 弹出框内联样式
          * noButtons: 是否需要按钮,默认false
          *
          * 事件类参数:
          * init: 弹出框插入body时
          * confrim: 用户点击确认时
          * close: 弹出框点击关闭时
          * show: 弹出框显示时
          * hide: 弹出框隐藏时
          *
          * 按钮类buttons:
          * name: 按钮文字
          * btnClass: 按钮样式名
          * click: 按钮点击事件
          * close: true|false 是否在点击后关闭弹出框
          */
        dialog: function(setting){
            if('string' == typeof(setting) ){
                var tmp = {};
                tmp.type = 'msg';
                tmp.content = setting;
                setting = tmp;
            }

            //事件回调
            var _events = {
                init: setting.init || function(){},
                confirm: setting.confirm || function(){},
                concel: setting.concel || function(){},
                close: setting.close || function(){},
                show: setting.show || function(){},
                hide: setting.hide || function(){},
            };
            //属性
            var _type       = setting.type || 'msg',
                _timeout    = setting.timeout || 0,
                _title      = setting.title || '提示',
                _content    = setting.content || "",
                _class      = setting.class || "",
                _width      = setting.width || '',
                _height     = setting.height || '',
                _style      = setting.style || ";",
                _buttons    = setting.buttons || [],
                _noButtons  = setting.noButtons ||false;
            //dialog的dom和对象
            var dialogDom, dialogObj = {};

            dialogObj.resize = function(){
                _width = dialogDom.find('.modal-dialog').outerWidth();

                // 判断内容层宽度设置居中
                if ((_width != undefined && _width != "") || _style.indexOf("width") != -1) {
                    _width = dialogDom.children('.modal-dialog').css("width");
                    var m_left;
                    switch (_width.replace(/[0-9]/g, "")) {
                        case "px":
                            m_left = -Number(_width.slice(0, -2)) / 2 + "px";
                            dialogDom.children('.modal-dialog').css("margin-left", m_left);
                            break;
                        case "em":
                            m_left = -Number(_width.slice(0, -2)) / 2 + "em";
                            dialogDom.children('.modal-dialog').css("margin-left", m_left);
                            break;
                        case "rem":
                            m_left = -Number(_width.slice(0, -3)) / 2 + "rem";
                            dialogDom.children('.modal-dialog').css("margin-left", m_left);
                            break;
                        case "%":
                            m_left = -Number(_width.slice(0, -1)) / 2 + "%";
                            dialogDom.children('.modal-dialog').css("margin-left", m_left);
                            break;
                    }
                }

                _height = dialogDom.find('.modal-dialog').outerHeight();
                //判断内容层高度设置居中    
                if ((_height != undefined && _height != "") || _style.indexOf("height") != -1) {
                    _height = dialogDom.children('.modal-dialog').css("height");
                    var m_top;
                    switch (_height.replace(/[0-9]/g, "")) {
                        case "px":
                            m_top = -Number(_height.slice(0, -2)) / 2 + "px";
                            dialogDom.children('.modal-dialog').css("margin-top", m_top);
                            break;
                        case "em":
                            m_top = -Number(_height.slice(0, -2)) / 2 + "em";
                            dialogDom.children('.modal-dialog').css("margin-top", m_top);
                            break;
                        case "rem":
                            m_top = -Number(_height.slice(0, -3)) / 2 + "rem";
                            dialogDom.children('.modal-dialog').css("margin-top", m_top);
                            break;
                        case "%":
                            m_top = -Number(_height.slice(0, -1)) / 2 + "%";
                            dialogDom.children('.modal-dialog').css("margin-left", m_top);
                            break;
                    }
                }
            }

            dialogObj.append = function(dialogHtml){
                dialogDom = $('<div class="modal-wrap">' + dialogHtml + '<div class="modal-bg"></div></div>');
                dialogObj.hide();
                $('body').append(dialogDom);
                _events.init(dialogDom);
                return dialogObj;
            }

            dialogObj.show = function(){
                dialogDom.show();
                $('body').addClass('noscroll');
                _events.show(dialogDom, dialogObj);
                dialogDom.find('.btn-focus').focus();
                return dialogObj;
            }

            dialogObj.hide = function(){
                dialogDom.hide();
                if($('.modal-wrap') <= 1){
                    $('body').removeClass('noscroll')
                }
                _events.hide(dialogDom, dialogObj);
                return dialogObj;
            }

            dialogObj.close = function(){
                dialogObj.hide();
                dialogDom.remove();
                _events.close();
                return dialogObj;
            }



            if( _type == 'msg' && _buttons.length < 1 &&_noButtons == false){
                _buttons = [{name: '确认', btnClass: 'dialog-ok', click: _events.confirm, focus: true}]
            }   

            var buttonsHtml = [];
            $(_buttons).each(function(i){
                this.btnClass += _buttons[i].focus? ' btn-focus' : '';
                buttonsHtml.push('<a href="javascript:void(0)" data-btn-index="' + i + '" class="btn dialog-default '+ this.btnClass  + '">' + this.name + '</a>');
            })

            buttonsHtml = buttonsHtml.join('\n');

            var dialogHtml = '';
            switch(_type){
                case 'loading':
                    dialogHtml = '<div class="modal-loadimg">\n'
                               + '    <img src="images/gears.gif" alt="">\n'
                               + '    <p class="load-text">正在读取数据...</p>\n'
                               + '</div>\n';
                    break;

                case 'msg':
                    dialogHtml = '<div class="modal-dialog dialog-tipsbox '+ _class + '" style="' + 'width:' + _width + ';height:' + _height + ';'+_style + '">'
                               + '    <h4 class="modal-title">'
                               + '        <i class="fa fa-info-circle"></i>'
                               + '        <span class="dialog-title">' + _title + '</span>'
                               + '        <span class="modal-close">&#215;</span>'
                               + '    </h4>' 
                               + '  <div class="modal-inner">'
                               + '        <div class="dialog-text">' + _content + '</div>' 
                               + '        <div class="dialog-btn-group">'+ buttonsHtml +'</div>\n' 
                               + '  </div>\n' 
                               + '</div>';

                    break;

                default:
                    break;
            }

            dialogObj.append(dialogHtml)

            dialogDom.find('.dialog-btn-group > a').each(function(){
                var button = $(this);
                var i = button.attr('data-btn-index');
                button.click(function(){
                    _buttons[i].click();
                    if(typeof(_buttons[i].close) == 'undefined' ||  _buttons[i].close){
                        dialogObj.close()
                    }
                });
            })

            //使title可以拖动。
            var title = dialogDom.find('.modal-title');
            var move = false; //移动标记 
            var _x,
                _y,//鼠标离控件左上角的相对位置 
                x, 
                y; //对话框实时的位置
            title.mousedown(function(e) {
                move = true;
                _x = e.pageX - parseInt(dialogDom.css("left"));
                _y = e.pageY - parseInt(dialogDom.css("top"));
            });

            $(document).mousemove(function(e) {
                if (move) {
                    x = e.pageX - _x; //控件左上角到屏幕左上角的相对位置 
                    y = e.pageY - _y;
                    dialogDom.css({
                        "top": y,
                        "left": x
                    });
                }
            }).mouseup(function() {
                move = false;
            });

            dialogDom.find('.dialog-ok').focus();

            dialogDom.find('.modal-close').click(function() {
                dialogObj.close(); // 传this到function
            });

            dialogObj.show();

            if(_timeout > 0){
                setTimeout(function(){
                    dialogObj.close()
                }, _timeout);
            }
            dialogObj.resize();
            return dialogObj;
        }

    })
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值