对bootstrap modal的简单扩展封装

参考自:http://www.muzilei.com/archives/677   注:原文不支持bootstrap新版本,并且居中等存在问题

  此段时间一直在学习bootstrap,主要是用于做后台,一直习惯用easyui,ui,jgrid前端框架,以至于并不习惯bootstrap的风格。近来考虑到easyui性能不太好,就用了bootstrap,先说下我所了解的bootstrap. 1.外国的框架用于显示中文看着总是不妥. 2.默认的样式觉得有些松散;比如表格,必须加上table-condensed类才显得紧凑一些。

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

  调用代码

             <a class="mzDialog" href="#" data-remote="/AccountingPeriod/Init" data-mtitle="哈哈" data-id="m1" data-width="600" data-height="500" data-backdrop=false data-okevent="ok()" data-openevent="open()">弹窗demo</a>

 

        $(".mzDialog").wwDialog();

  目前只支持以data-属性调用,不支持以js方式调用,欢迎大家扩展一下哦

  参数介绍

 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//单击确定按钮回调函数

  下面是源代码:

 /*------------------------------------------------------
*封装的dialog插件,基于bootstrap模态窗口的简单扩展
*作者:muzilei
*修改人:lyw 原插件对bootstrap3.3.0不支持
*email:530624206@qq.com
-------------------------------------------------------*/
/*----------------------------------------------------------------------------------------------------
1、bootstrap-wwDialog 插件暂时只有2个按钮,取消和确定,暂不支持自定义按钮,自己可以修改源代码添加此功能。 2、只能使用html data-*方式定义,不支持js初始化时配置参数,自己可以修改源码扩展此功能。 3、宽度和高度建议不要使用百分比 4、注意这里回调函数必需是字符串格式,如okEvent:”ok()” 这里ok函数式自己定义的函数,切记要带();
------------------------------------------------------------------------------------------------------*/
(function ($) {
$.fn.wwDialog = function () {
var defaults = {
id: "modal",//弹窗id
title: "dialog",//弹窗标题
width: "600",//弹窗宽度,暂时不支持%
height: "500",//弹窗高度,不支持%
backdrop: false,//是否显示遮障,和原生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);
modal.modal({
backdrop: false,
keyboard: opts.keyboard
});
$(".modal-body").load(opts.remote); //窗口大小位置
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.css({
position: "absolute",
left: ($(window).width() - opts.width) / 2,
top: ($(document).height() - opts.height) / 2
});
$(".modal-body").css({
height: opts.height - 115
});
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);
} });
//绑定按钮事件
$(".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 fade" role="dialog" tabindex="-1" aria-labelledby="myModalLabel" aria-hidden="true" ><div style=" background-color: #000;bottom: 0;left: 0;position: fixed;right: 0;top: 0;transition: opacity 0.15s linear 0s;opacity: 0.5;"></div><div class="modal-dialog" style="display:table-cell"><div class="modal-content" style="width:' + o.width + 'px;height:' + o.height + 'px;"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" ><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button><h4 id="myModalLabel" class="modal-title">' + o.title + '</h4></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></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")
});
$(".modal").remove();
creatDialog.init(opts);
});
}); }; })(jQuery);

对bootstrap modal的简单扩展封装的更多相关文章

  1. bootstrap插件学习-bootstrap.modal.js

    bootstrap插件学习-bootstrap.modal.js 先从bootstrap.modal.js的结构看起. function($){ var Modal = function(){} // ...

  2. 对bootstrap中confirm alert进行封装

    HTML: <!-- system modal start --> <div id="ycf-alert" class="modal"> ...

  3. jeecg扩展封装tag的那些事

    版权声明:本文为楼主原创文章,未经楼主允许不得转载,如要转载请注明来源. 目前公司开发一直使用的是jeecg框架,简单好用,但有时候不如自己写的随心所欲.最近项目遇到一个需求, 想封装配置加解密,本来 ...

  4. Bootstrap Modal 垂直方向加滚动条

    原文链接:http://blog.csdn.net/cyh1111/article/details/52960747 背景 使用Bootstrap Modal实现用户资料修改,由于用户信息过多,默认M ...

  5. [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)

    [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例) 踏雁寻花 发表于 2015-8-23 23:31:28 https://www.itsk.com/thread-35 ...

  6. Bootstrap modal垂直居中

    Bootstrap modal垂直居中   在网上看到有Bootstrap2的Modal dialog垂直居中问题解决方法,这种方法自己试了一下,并不能完全居中,并且窗口的大小不一样的话,每次显示的m ...

  7. Log4net创建日志及简单扩展

    转:http://blog.csdn.net/CHENFEIYANG2009/article/details/5397342 1.概述 log4net是.Net下一个非常优秀的开源日志记录组件.log ...

  8. Bootstrap modal常用参数、方法和事件

    Bootstrap modal(模态窗)常用参数.方法和事件: 参数: 名称 类型 默认值 描述 Backdrop Boolean或字符串“static” True True:有背景,点击modal外 ...

  9. 学习笔记: Expression表达式目录树详解和扩展封装

    1. 表达式链接扩展封装,ORM常用 And  Or /// <summary> /// 表达式访问者 /// </summary> public class Expressi ...

随机推荐

  1. 【原创】No matching distribution found for Twisted>=10.0.0 (from scrapy)

    系统  Ubuntu14.04 python  2.7.11 运行  pip install scrapy  报错: No matching distribution found for Twiste ...

  2. VS2010 "error MSB8011” 解决方法

    http://blog.csdn.net/heihei36/article/details/8923971 —————————————————————————————————————————————— ...

  3. ---Ubuntu 14.04 虚拟机器和主机时间同步

    先把vmware tool 装好! sudo /usr/bin/vmware-toolbox-cmd  timesync enable

  4. 【转载】H264--1--编码原理以及I帧B帧P帧

    ---------------------- 前言 ----------------------- H264是新一代的编码标准,以高压缩高质量和支持多种网络的流媒体传输著称,在编码方面,我理解的他的理 ...

  5. VC++ WINDOWS自定义消息范围

    WINDOWS自定义消息WM_USER和WM_APP WM_USER常量是Windows帮助应用程序定义私有窗口类里的私有消息,通常使用WM_USER+一个整数值,但总值不能超过0x7FFF(十进制: ...

  6. PHP调试总结

    PHP调试总结一,环境方面,比如查看安装扩展是否生效,是总支持某扩展.可以在web目录中建一个phpinfo.php在里面输入<?phpphpinfo();?>在浏览器上访问一下,会输出P ...

  7. 企业好助手U-Mail邮件服务器软件

    对于一家企业,最核心的是什么?有人说人才,有人说技术,也有人说是数据(信息),依小编来 看,这些答案都没错,人才会流动,技术在不断更新,唯有数据(信息),日积月累,将沉淀为公司历史的一部分,作为决策的 ...

  8. 《Linux内核设计与实现》读书笔记 第一章 Linux内核简介

    一.相关历史 1. Unix内核的特点 简洁:仅提供系统调用并有一个非常明确的设计目的 抽象:几乎所有东西都被当做文件 可移植性:使用C语言编写,使得其在各种硬件体系架构面前都具备令人惊异的移植能力 ...

  9. how spring resolves a request

    quoted from answer at http://stackoverflow.com/questions/14015642/how-does-the-dispatcherservlet-res ...

  10. mysql学习(二)

    (1)存储过程:存储过程是SQL语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理: (2)存储过程优点:增强SQL语句的功能和灵活性,实现较快的执行速度,减少网络流量: (3)存储过程结构 ...