简易弹窗
开发说明
- 项目使用原型对象的方式实现弹窗的基本功能
- 项目依赖jquery,如果使用zepto,可能需要改动代码,未测试,有问题请反馈,及时解决
- 项目提供了可定制弹窗,可以自定义按钮,标题,以及对应按钮的回调函数
- 样式完全可以按照自己的需求自定义,很灵活。
css样式
/*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('点击我的回调哈')});
如在使用过程中遇到任何问题,或者有更好的方案欢迎留言,谢谢!