封装的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 相关文章推荐
Javascript里使用Dom操作Xml
Jan 22 Javascript
JavaScript 快捷键设置实现代码
Mar 13 Javascript
jQuery之自动完成组件的深入解析
Jun 19 Javascript
jquery遍历数组与筛选数组的方法
Nov 05 Javascript
javascript实现倒计时N秒后网页自动跳转代码
Dec 11 Javascript
用户代理字符串userAgent可实现的四个识别
Sep 20 Javascript
jQuery使用EasyUi实现三级联动下拉框效果
Mar 08 Javascript
bootstrap treeview 扩展addNode方法动态添加子节点的方法
Nov 21 Javascript
详解JS模块导入导出
Dec 20 Javascript
swiper Scrollbar滚动条组件详解
Sep 08 Javascript
electron踩坑之dialog中的callback解决
Oct 06 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
Oct 19 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笔试题
2009/08/04 PHP
PHP输出两个数字中间有多少个回文数的方法
2015/03/23 PHP
yii2使用GridView实现数据全选及批量删除按钮示例
2017/03/01 PHP
Symfony2针对输入时间进行查询的方法分析
2017/06/28 PHP
CentOS7.0下安装PHP5.6.30服务的教程详解
2018/09/29 PHP
php封装的pdo数据库操作工具类与用法示例
2019/05/08 PHP
laravel实现简单用户权限的示例代码
2019/05/28 PHP
用js实现的仿sohu博客更换页面风格(简单版)
2007/03/22 Javascript
自制基于jQuery的智能提示插件一枚
2011/02/18 Javascript
用javascript为页面添加天气显示实现思路及代码
2013/12/02 Javascript
了不起的node.js读书笔记之mongodb数据库交互
2014/12/22 Javascript
input输入框鼠标焦点提示信息
2015/03/17 Javascript
获取JS中网页各种高宽与位置的方法总结
2016/07/27 Javascript
微信小程序报错:this.setData is not a function的解决办法
2017/09/27 Javascript
详解vue.js根据不同环境(正式、测试)打包到不同目录
2018/07/13 Javascript
JSON的parse()方法介绍
2019/01/31 Javascript
详解微信小程序之一键复制到剪切板
2019/04/24 Javascript
Vue分页器实现原理详解
2019/06/28 Javascript
js实现图片粘贴到网页
2019/12/06 Javascript
[01:13:46]iG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python实现将照片变成卡通图片的方法【基于opencv】
2018/01/17 Python
Python面向对象类继承和组合实例分析
2018/05/28 Python
python随机在一张图像上截取任意大小图片的方法
2019/01/24 Python
Python基于yield遍历多个可迭代对象
2020/03/12 Python
python3中TQDM库安装及使用详解
2020/11/18 Python
python 实现ping测试延迟的两种方法
2020/12/10 Python
阿玛尼美国官方网站:Armani.com
2016/11/25 全球购物
工商管理专业实习大学生自我鉴定
2013/09/19 职场文书
化工工艺专业求职信
2013/09/22 职场文书
大学本科毕业生求职简历的自我评价
2013/10/09 职场文书
应届实习生的自我评价范文
2014/01/05 职场文书
2014学年自我鉴定
2014/02/23 职场文书
森马旗舰店双十一营销方案
2014/09/29 职场文书
2016年学校党支部公开承诺书
2016/03/25 职场文书
python 管理系统实现mysql交互的示例代码
2021/12/06 Python
超越Nginx的Web服务器caddy优雅用法
2022/06/21 Servers