/*dialog*/ body.locked{overflow-y:hidden;} .dialog-box{ width:100%;height:100%;max-width:720px;position: fixed;top:0;left:0;bottom:0;right:0;background:rgba(0,0,0,0.3);z-index:1000;display:none;} .dialog-box .dialog-content{width:460px;padding:30px 10px;height:auto;border-radius:10px; background: #ffffff;min-height:100px;position:absolute;top:50%;left:50%; transform: translate(-50%,-50%);-o-transform: translate(-50%,-50%);-moz-transform: translate(-50%,-50%); -webkit-transform: translate(-50%,-50%);z-index:1001;} .dialog-box .dialog-title,.dialog-box .dialog-btn{color:#666666;font-size: 30px;text-align:center;} .dialog-box .dialog-title{padding:0 12px;} .dialog-box .dialog-btns{text-align:center;} .dialog-box .dialog-btn{display:inline-block;width:130px;margin:28px 44px 0;border-radius: 4px;height:56px;line-height: 56px;} .dialog-box .dialog-cancel-btn{background: #dddddd;} .dialog-box .dialog-confirm-btn{background: #9cbf42;color:#ffffff;} .store-switch-tip{color:#9cbf42;font-size: 30px;padding:0 6px;} 基本样式设置,能够根据本身的需求自定义样式
Dialog = function( options ){ var defaultOptions = { container : 'dialog-box', btns : [ { klass : 'dialog-cancel-btn', txt:'取消'}, { klass : 'dialog-confirm-btn', txt : '确认'} ] }; // 合并自定义参数 this.options = $.extend({}, defaultOptions, options || {}); }; 1. options : 参数对象,若是不传则系统默认,参数类型必须是对象,与定义的defaultOptions格式一致 2. $.extend() :合并参数,不知道其用法的,请查阅相关资料。
Dialog.prototype = { $body : $('body'), constructor : Dialog, show : function( title ){ var _self = this, args = Array.prototype.slice.apply(arguments), options = _self.options; args.shift(); _self.$body.addClass('locked'); setTimeout(function(){ $('.' + options.container ).show().find('.dialog-title').html( title ); $.each(options.btns,function( k, v ){ $('.' + v.klass ).data( 'fn',args[k] || function(){} ); }); },30); }, init : function(opt){ var _self = this, options = $.extend({}, _self.options, opt || {}) , // 合并自定义参数 btnsHTML = '', node = $('.' + options.container ).remove(); // 移除已存在的弹窗 node = null; $.each( options.btns, function( k, v ){ btnsHTML += '<span class="' + v.klass + ' dialog-btn" >' + v.txt + '</span>'; }); $('<section class="' + options.container + '">' + '<div class="dialog-content">' + '<div class="dialog-title"></div>' + '<div class="dialog-btns">' + btnsHTML + '</div>' + '</div>' + '</section>').appendTo('body'); _self._event(); return _self; }, _event : function(){ var _self = this; var options = _self.options; $('.' + options.container ).on('click', '.dialog-btn', function(e){ e.stopPropagation(); _self.$body.removeClass('locked'); $('.' + options.container ).hide(); $(this).data('fn')(); }); } }; 1.原型中提供了init和show方法。 init方法能够接受参数,也是一个参数对象,与在构造函数中的方法同样,主要是为了方便更改弹窗功能。 show方法主要是作显示处理,须要传标题,和相应按钮的回调函数,并将回调函数绑定在相应的按钮上,以待按钮触发事件时回调。 2.按钮回调函数的绑定是经过jquery中的 data 方法实现的,能够查阅相关的资料
// 实例化弹窗对象 var dialog = new Dialog(); // var dialog = new Dialog({ // 能够配置相应的参数,也能够不配置使用默认,默认是一个确认一个取消,注意参数格式,请参照默认参数配置 // }); dialog.init(); // 初始化弹窗 dialog.show('我是标题',function(){ alert('按钮1触发后的回调!') },function(){ console.log('按钮2的回调函数!'); }[,...]);// 注意回调函数要和按钮一一对应。 固然你也能够连着写 如:dialog.init().show(); 若是须要的话,你也能够在弹窗初始话的时候传参,修改默认配置参数。在实例化后,是双按钮,而后有须要一个但按钮。 这时你无需在建立一个弹窗实例,直接调用实例的init方法,配置相应的参数便可。你能够这样使用: dialog.init({ btns : [ { klass : 'dialog-confirm-btn', txt : '知道了'} ] }).show('我只有一个按钮哈',function(){alert('点击个人回调哈')});
如在使用过程当中遇到任何问题,或者有更好的方案欢迎留言,谢谢!css