封装的dialog插件 基于bootstrap模态对话框的简单扩展


Posted in Javascript onAugust 10, 2016

在使用bootstrap 模态对话框时需要在页面写对话框html,如果一个页面有许多地方需要对话框,那意味着需要写多个,感觉很麻烦,平时不太习惯bootstrap 模态对话框这种方式,所以做了个简单封装及扩展,增加了自定义标题,宽度和高度,并根据宽高居中显示。

默认属性:
id:"modal",//弹窗id
title:"dialog",//弹窗标题
width:"600",//弹窗宽度,暂时不支持%
height:"500",//弹窗高度,不支持%
backdrop:true,//是否显示遮障,和原生bootstrap 模态框一样
keyboard:true,//是否开启esc键退出,和原生bootstrap 模态框一样
remote:"",//加载远程url,和原生bootstrap 模态框一样
openEvent:null,//弹窗打开后回调函数
closeEvent:null,//弹窗关闭后回调函数
okEvent:null//单击确定按钮回调函数
使用方法:
1.通过html data-*属性定义

<a class="mzDialog" href="#" data-remote="test.html" data-mtitle="modal1" data-id="m1" data-width="600" data-okEvent="ok()">弹窗demo</a>

2.通过js初始化
$(".mzDialog").mzDialog();
不完善的地方及bug,这里只是学习参考,自己可以修改完善
1、bootstrap-mzDialog 插件暂时只有2个按钮,取消和确定,暂不支持自定义按钮,自己可以修改源代码添加此功能。
2、只能使用html data-*方式定义,不支持js初始化时配置参数,自己可以修改源码扩展此功能。
3、宽度和高度建议不要使用百分比
4、注意这里回调函数必需是字符串格式,如okEvent:”ok()” 这里ok函数式自己定义的函数,切记要带();
js源码:
/*------------------------------------------------------
 *封装的dialog插件,基于bootstrap模态窗口的简单扩展
 *作者:muzilei
 *email:530624206@qq.com
----------------------------------------------------------*/
(function ($) {
$.fn.mzDialog = function () {
   var defaults={
   id:"modal",//弹窗id
  title:"dialog",//弹窗标题
  width:"600",//弹窗宽度,暂时不支持%
  height:"500",//弹窗高度,不支持%
  backdrop:true,//是否显示遮障,和原生bootstrap 模态框一样
  keyboard:true,//是否开启esc键退出,和原生bootstrap 模态框一样
  remote:"",//加载远程url,和原生bootstrap 模态框一样
  openEvent:null,//弹窗打开后回调函数
  closeEvent:null,//弹窗关闭后回调函数
  okEvent:null//单击确定按钮回调函数
 };
  
 //动态创建窗口
 var creatDialog={
 init:function(opts){
  var _self=this;
  
  //动态插入窗口
  var d=_self.dHtml(opts);
  $("body").append(d);
  
  var modal=$("#"+opts.id);
    
  //初始化窗口
  modal.modal(opts);
  
  //窗口大小位置
  var h=modal.height()-modal.find(".modal-header").outerHeight()-modal.find(".modal-footer").outerHeight()-5;
   modal.css({'margin-left':opts.width/2*-1,'margin-top':opts.height/2*-1,'top':'50%'}).find(".modal-body").innerHeight(h);
        
  modal
  //显示窗口
  .modal('show')
  //隐藏窗口后删除窗口html
  .on('hidden', function () {
   modal.remove();
   $(".modal-backdrop").remove();
   if(opts.closeEvent){
   eval(opts.closeEvent);
   }
   })
  //窗口显示后 
  .on('shown', function () {
    
   if(opts.openEvent){
   eval(opts.openEvent);
   }
   
   //绑定按钮事件
   $(this).find(".ok").click(function(){
    if(opts.okEvent){
    var ret=eval(opts.okEvent);
    if(ret){
     modal.modal('hide');
     }
    }
    });
  
   });
  },
 dHtml:function(o){
  return '<div id="'+o.id+'" class="modal hide fade" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" style="width:'+o.width+'px;height:'+o.height+'px;"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button><h3 id="myModalLabel">'+o.title+'</h3></div><div class="modal-body"><p>正在加载...</p></div><div class="modal-footer"><button class="btn" data-dismiss="modal" aria-hidden="true">取消</button><button class="btn btn-primary ok">确定</button></div></div>';
  }
 };
  
  return this.each(function () {
     $(this).click(function(){
  var opts = $.extend({},defaults,{
   id:$(this).attr("data-id"),
   title:$(this).attr("data-mtitle"),
   width:$(this).attr("data-width"),
   height:$(this).attr("data-height"),
   backdrop:$(this).attr("data-backdrop"),
   keyboard:$(this).attr("data-keyboard"),
   remote:$(this).attr("data-remote"),
   openEvent:$(this).attr("data-openEvent"),
   closeEvent:$(this).attr("data-closeEvent"),
   okEvent:$(this).attr("data-okEvent")
  });
   
   creatDialog.init(opts);
  });
  });
 
};
 
})(jQuery);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery EasyUI NumberBox(数字框)的用法
Jul 08 Javascript
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
Aug 28 Javascript
Javascript 实现图片无缝滚动
Dec 19 Javascript
jQuery中has()方法用法实例
Jan 06 Javascript
js实现超简单的展开、折叠目录代码
Aug 28 Javascript
浅谈JS中json数据的处理
Jun 30 Javascript
js实现图片加载淡入淡出效果
Apr 07 Javascript
JS实现简单抖动效果
Jun 01 Javascript
深入理解Vue-cli搭建项目后的目录结构探秘
Jul 13 Javascript
微信小程序chooseImage的用法(从本地相册选择图片或使用相机拍照)
Aug 22 Javascript
vue-router的HTML5 History 模式设置
Sep 08 Javascript
layUI的验证码功能及校验实例
Oct 25 Javascript
JS控制静态页面传递参数并获取参数应用
Aug 10 #Javascript
基于JavaScript实现树形下拉框
Aug 10 #Javascript
关于原生js中bind函数的简单实现
Aug 10 #Javascript
Mvc提交表单的四种方法全程详解
Aug 10 #Javascript
mvc中form表单提交的三种方式(推荐)
Aug 10 #Javascript
浅谈JS运算符&amp;&amp;和|| 及其优先级
Aug 10 #Javascript
浅谈jQuery中的checkbox问题
Aug 10 #Javascript
You might like
php下使用SMTP发邮件的代码
2008/01/10 PHP
php给图片加文字水印
2015/07/31 PHP
详解php 使用Callable Closure强制指定回调类型
2017/10/26 PHP
一个加载js文件的小脚本
2007/06/28 Javascript
JavaScript 快捷键设置实现代码
2009/03/13 Javascript
firefox事件处理之自动查找event的函数(用于onclick=foo())
2010/08/05 Javascript
js对象数组按属性快速排序
2011/01/31 Javascript
JavaScript中的值是按值传递还是按引用传递问题探讨
2015/01/30 Javascript
jQuery实现html元素拖拽
2015/07/21 Javascript
BootStrap 可编辑表Table格
2016/11/24 Javascript
详解如何在Vue2中实现组件props双向绑定
2017/03/29 Javascript
javascript实现table单元格点击展开隐藏效果(实例代码)
2017/04/10 Javascript
在Vue组件化中利用axios处理ajax请求的使用方法
2017/08/25 Javascript
浅谈mint-ui loadmore组件注意的问题
2017/11/08 Javascript
解决百度Echarts图表坐标轴越界的方法
2018/10/17 Javascript
vue实现跳转接口push 转场动画示例
2019/11/01 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
2020/01/18 Javascript
jQuery实现移动端扭蛋机抽奖
2020/11/08 jQuery
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
Python爬虫包 BeautifulSoup  递归抓取实例详解
2017/01/28 Python
pytorch自定义初始化权重的方法
2019/08/17 Python
python pyqtgraph 保存图片到本地的实例
2020/03/14 Python
关于matplotlib-legend 位置属性 loc 使用说明
2020/05/16 Python
python给视频添加背景音乐并改变音量的具体方法
2020/07/19 Python
Python监听剪切板实现方法代码实例
2020/11/11 Python
python爬虫工具例举说明
2020/11/30 Python
利用指针变量实现队列的入队操作
2012/04/07 面试题
高二英语教学反思
2014/01/19 职场文书
2013年军训通讯稿
2014/02/05 职场文书
《商鞅南门立木》教学反思
2014/02/16 职场文书
少儿节目主持串词
2014/04/02 职场文书
入党思想汇报怎么写
2014/04/03 职场文书
2014年物业公司工作总结
2014/11/22 职场文书
综合实践活动报告
2015/02/05 职场文书
教师党员自我评价2015
2015/03/04 职场文书
虚拟机linux端mysql数据库无法远程访问的解决办法
2021/05/26 MySQL