封装的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 相关文章推荐
js类 from qq
Nov 13 Javascript
js有关元素内容操作小结
Dec 20 Javascript
判断一个对象是否为jquery对象的方法
Mar 12 Javascript
JQuery中ajax方法访问web服务实例
Jul 18 Javascript
javascript去掉代码里面的注释
Jul 24 Javascript
AngularJs  Creating Services详解及示例代码
Sep 02 Javascript
domReady的实现案例
Nov 23 Javascript
jquery利用json实现页面之间传值的实例解析
Dec 12 Javascript
jQuery读取本地的json文件(实例讲解)
Oct 31 jQuery
简单理解Vue中的nextTick方法
Jan 30 Javascript
js实现转动骰子模型
Oct 24 Javascript
Vue使用JSEncrypt实现rsa加密及挂载方法
Feb 07 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
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
2013/04/08 PHP
phpMyAdmin自动登录和取消自动登录的配置方法
2014/05/12 PHP
PHP设计模式之工厂方法设计模式实例分析
2018/04/25 PHP
通过修改referer下载文件的方法
2008/05/11 Javascript
javascript打开新窗口同时关闭旧窗口
2009/01/16 Javascript
Date对象格式化函数代码
2010/07/17 Javascript
JavaScript高级程序设计 客户端存储学习笔记
2011/09/10 Javascript
jQuery.buildFragment使用方法及思路分析
2013/01/07 Javascript
JSON格式化输出
2014/11/10 Javascript
js结合正则实现国内手机号段校验
2015/06/19 Javascript
详解JavaScript ES6中的Generator
2015/07/28 Javascript
深入浅析javascript立即执行函数
2015/10/23 Javascript
JavaScript程序开发之JS代码放置的位置
2016/01/15 Javascript
JavaScript常见的五种数组去重的方式
2016/12/15 Javascript
AngularJS自定义指令详解(有分页插件代码)
2017/06/12 Javascript
ES6中Class类的静态方法实例小结
2017/10/28 Javascript
vue项目中axios使用详解
2018/02/07 Javascript
浅谈VUE-CLI脚手架热更新太慢的原因和解决方法
2018/09/28 Javascript
JavaScript学习笔记之DOM操作实例分析
2019/01/08 Javascript
vue-loader中引入模板预处理器的实现
2019/09/04 Javascript
详解webpack-dev-middleware 源码解读
2020/03/23 Javascript
Python控制多进程与多线程并发数总结
2016/10/26 Python
使用Python+Splinter自动刷新抢12306火车票
2018/01/03 Python
Python基于更相减损术实现求解最大公约数的方法
2018/04/04 Python
Django项目创建及管理实现流程详解
2020/10/13 Python
Python中生成ndarray实例讲解
2021/02/22 Python
html+js 实现markdown编辑器效果
2019/10/23 HTML / CSS
德国BA保镖药房韩文网:kr.ba.de
2017/09/04 全球购物
联想德国官网:Lenovo Germany
2018/07/04 全球购物
adidas马来西亚官网:adidas MY
2020/09/12 全球购物
工程力学专业自荐信范文
2014/03/17 职场文书
2014教师党员个人自我评议
2014/09/20 职场文书
经典爱情感言
2015/08/03 职场文书
纪念建国70周年演讲稿
2019/07/19 职场文书
纯html+css实现Element loading效果
2021/08/02 HTML / CSS
聊聊配置 Nginx 访问与错误日志的问题
2022/05/25 Servers