封装的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建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)
Feb 26 Javascript
JS、CSS以及img对DOMContentLoaded事件的影响
Aug 12 Javascript
javascript事件委托的方式绑定详解
Jun 10 Javascript
每天一篇javascript学习小结(面向对象编程)
Nov 20 Javascript
jquery 遍历数组 each 方法详解
May 25 Javascript
完美实现八种js焦点轮播图(上篇)
Jul 18 Javascript
javascript实现下雨效果
Mar 27 Javascript
JS滚动到指定位置导航栏固定顶部
Jul 03 Javascript
聊聊Vue.js的template编译的问题
Oct 09 Javascript
Echart折线图手柄触发事件示例详解
Dec 16 Javascript
js简单遍历获取对象中的属性值的方法示例
Jun 19 Javascript
react+redux仿微信聊天界面
Jun 21 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
PHP4.04简明安装
2006/10/09 PHP
两个强悍的php 图像处理类1
2009/06/15 PHP
windows下开发并编译PHP扩展的方法
2011/03/18 PHP
用PHP提取中英文词语以及数字的首字母的方法介绍
2013/04/23 PHP
php中出现空白页的原因及解决方法汇总
2014/07/08 PHP
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
2014/12/09 PHP
php随机生成数字字母组合的方法
2015/03/18 PHP
PHPCMS2008广告模板SQL注入漏洞修复
2016/10/11 PHP
地址栏上的一段语句,改变页面的风格。(教程)
2008/04/02 Javascript
JS鼠标事件大全 推荐收藏
2011/11/01 Javascript
window.parent与window.openner区别介绍
2012/04/12 Javascript
extjs ColumnChart设置不同的颜色实现代码
2013/05/17 Javascript
JQuery选中checkbox方法代码实例(全选、反选、全不选)
2015/04/27 Javascript
js中unicode转码方法详解
2015/10/09 Javascript
JavaScript Length 属性的总结
2015/11/02 Javascript
JQuery遍历元素的父辈和祖先的方法
2016/09/18 Javascript
JavaScript之创意时钟项目(实例讲解)
2017/10/23 Javascript
Vue.js组件使用props传递数据的方法
2019/10/19 Javascript
微信小程序canvas开发水果老虎机的思路详解
2020/02/07 Javascript
[00:17]DOTA2荣耀之路5:It’s a disastah!
2018/05/28 DOTA
[03:12]TI9战队档案 - Virtus Pro
2019/08/20 DOTA
python中print的不换行即时输出的快速解决方法
2016/07/20 Python
pandas.loc 选取指定列进行操作的实例
2018/05/18 Python
深入flask之异步非堵塞实现代码示例
2018/07/31 Python
python添加模块搜索路径和包的导入方法
2019/01/19 Python
django搭建项目配置环境和创建表过程详解
2019/07/22 Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
2020/10/31 Python
Python 远程开关机的方法
2020/11/18 Python
移动Web—CSS为Retina屏幕替换更高质量的图片
2012/12/24 HTML / CSS
CSS3中媒体查询结合rem布局适配手机屏幕
2019/06/10 HTML / CSS
JAVA中运算符的分类及举例
2015/09/12 面试题
店长岗位的工作内容
2013/11/12 职场文书
责任胜于能力演讲稿
2014/05/20 职场文书
物业保安岗位职责
2014/07/02 职场文书
2014年政协工作总结
2014/12/09 职场文书
超市工作总结范文2014
2014/12/19 职场文书