模态框 modal.js
模态框经过了优化,更加灵活,以弹出对话框的形式出现,具有最小和最实用的功能集。
模态框的特点:
- 不支持同时打开多个模态框 (千万不要在一个模态框上重叠另一个模态框。要想同时支持多个模态框,需要自己写额外的代码来实现。)
- 模态框的 HTML 代码放置的位置(务必将模态框的 HTML 代码放在文档的最高层级内(也就是说,尽量作为 body 标签的直接子元素),以避免其他组件影响模态框的展现和/或功能。)
- 对于移动设备的附加说明(在移动设备上使用模态框有一些额外要注意的事项。请参考 对浏览器的支持 章节获取更多信息。)
1、模态框实例
点击下面的按钮即可通过 JavaScript 启动一个模态框。此模态框将从上到下、逐渐浮现到页面前。

<!-- 模态声明 -->
<div class="modal" id="myModal">
<!-- 窗口声明 -->
<div class="modal-dialog">
<!-- 内容声明 -->
<div class="modal-content">
<!-- 模态框内容的头部 -->
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span>×</span></button>
<h4 class="modal-title">模态框标题</h4>
</div>
<!-- 模态框内容的主体部 -->
<div class="modal-body">
<p>这是模态框的主题内容</p>
</div>
<!-- 模态框内容的底部 -->
<div class="modal-footer">
<button type="button" class="btn btn-default">取消</button>
<button type="button" class="btn btn-primary">确定</button>
</div>
</div>
</div>
</div>
<!-- 按钮添加id -->
<button class="btn btn-primary" id="openModal">弹出模态框</button>
<!-- 通过js编程方式调用模态框 -->
<script>
$(function(){
$('#openModal').on('click',function(){
$('#myModal').modal();
});
});
</script>
2、模态框尺寸
模态框提供了两个可选尺寸,通过为
.modal-dialog
增加一个样式调整类实现。
- modal-lg 表示大尺寸模态框
- modal-sm 表示小尺寸模态框
<!-- 窗口声明 大尺寸模态框-->
<div class="modal-dialog modal-lg">
<!-- 窗口声明 小尺寸模态框-->
<div class="modal-dialog modal-sm">
3、模态框动画
通过为.modal添加模态动画类(例如.fade表示淡入淡出),可实现模态框显示相应的动画效果。
<!-- 模态声明 -->
<div class="modal fade" id="myModal">
4、模态框使用网格系统显示
<!-- 模态声明 -->
<div class="modal fade" id="myModal">
<!-- 窗口声明 -->
<div class="modal-dialog">
<!-- 内容声明 -->
<div class="modal-content">
<!-- 模态框内容的头部 -->
<div class="modal-header">
<!-- data-dismiss表示关闭插件modal -->
<button type="button" class="close" data-dismiss="modal"><span>×</span></button>
<h4 class="modal-title">模态框标题</h4>
</div>
<!-- 模态框内容的主体部 -->
<div class="modal-body">
<p>这是模态框的主题内容</p>
<!-- 水平方向排列的表单 -->
<div class="form-horizontal">
<!-- 表单组1 -->
<div class="form-group">
<label class="col-sm-3">用户名</label>
<div class="col-sm-6">
<input type="text" class="form-control" placeholder="请输入用户名">
</div>
<label class="col-sm-3 control-label text-danger">*不可为空</label>
</div>
<!-- 表单组2 -->
<div class="form-group">
<label class="col-sm-3">密码</label>
<div class="col-sm-6">
<input type="password" class="form-control" placeholder="请输入密码">
</div>
<label class="col-sm-3 control-label text-danger">*不可为空</label>
</div>
</div>
</div>
<!-- 模态框内容的底部 -->
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
<button type="button" class="btn btn-primary">确定</button>
</div>
</div>
</div>
</div>
<!-- 按钮添加id -->
<button class="btn btn-primary" id="openModal">弹出模态框</button>
<!-- 通过js编程方式调用模态框 -->
<script>
$(function(){
$('#openModal').on('click',function(){
$('#myModal').modal();
});
});
</script>
5、模态框的调用
通过 data 属性或 JavaScript 调用模态框插件,可以根据需要动态展示隐藏的内容。模态框弹出时还会为
<body>
元素添加
.modal-open
类,从而覆盖页面默认的滚动行为,并且还会自动生成一个
.modal-backdrop
元素用于提供一个可点击的区域,点击此区域就即可关闭模态框。
5.1 通过JavaScript 调用
<!-- 模态声明 -->
<div class="modal fade" id="myModal">
...
</div>
<!-- 按钮添加id -->
<button class="btn btn-primary" id="openModal">弹出模态框</button>
<!-- 通过js编程方式调用模态框 -->
<script>
$(function(){
$('#openModal').on('click',function(){
$('#myModal').modal(); //js调用模态框
});
});
</script>
5.2 通过data属性
先使用data-toggle来指定调用组件类型(调用modal组件),然后通过data-target指定调用哪一个modal组件(id为myModal的组件)
<!-- 模态声明 -->
<div class="modal fade" id="myModal">
...
</div>
<!-- 通过data属性调用模态框 -->
<button class="btn btn-primary" data-toggle="modal" data-target="#myModal">弹出模态框(通过data属性)</button>
6、模态框的参数
可以将选项通过 data 属性或 JavaScript 代码传递。模态框的参数包括如下:
- backdrop:表示模态框的透明背景底色(默认为true或“static”)
- keyboard:表示键盘上的 esc 键被按下时关闭模态框(默认为true)
- show:表示模态框初始化之后就立即显示出来(默认为true)
- remote:表示加载地址(默认为false)
6.1 通过JavaScript写法设置参数
<!-- 模态声明 -->
<div class="modal fade" id="myModal">
...
</div>
<!-- 按钮添加id -->
<button class="btn btn-primary" id="openModal">弹出模态框</button>
<!-- 通过js编程方式调用模态框 -->
<script>
$(function(){
$('#openModal').on('click',function(){
$('#myModal').modal({ //调用模态框 并设置参数
backdrop:false,
keyboard:true,
show:true
});
});
});
</script>
6.1 通过data属性写法设置参数
<!-- 模态声明 -->
<div class="modal fade" id="myModal">
...
</div>
<!-- 通过data属性调用模态框 -->
<button class="btn btn-primary" data-toggle="modal" data-target="#myModal" data-backdrop="false" data-keyboard="true" data-show="true">弹出模态框(通过data属性)</button>
7、模态框的方法
7.1 通过JavaScript写法设置模态框方法
7.1.1 模态框的show方法
手动打开模态框。
<!-- 模态声明 -->
<div class="modal fade" id="myModal">
...
</div>
<!-- 模态框的方法 -->
<button class="btn btn-primary" id="btnShow">模态框show方法</button>
<!-- 通过js编程方式调用模态框 -->
<script>
// 模态框show方法
$('#btnShow').on('click',function(){
$('#myModal').modal('show'); //调用show方法 显示模态框
})
});
</script>
7.1.2 模态框的toggle方法
手动打开或关闭模态框。
<!-- 模态声明 -->
<div class="modal fade" id="myModal">
...
</div>
<!-- 模态框的方法 -->
<button class="btn btn-primary" id="btnToggle">模态框toggle方法</button>
<!-- 通过js编程方式调用模态框 -->
<script>
//模态框toggle方法
$('#btnToggle').on('click',function(){
$('#myModal').modal('toggle'); //调用toggle方法 切换显示模态框
})
});
</script>
7.1.3 模态框的show和hide方法
实现效果:打开按钮显示模态框,2s后自动隐藏模态框。
<!-- 模态声明 -->
<div class="modal fade" id="myModal">
...
</div>
<!-- 模态框的方法 -->
<button class="btn btn-primary" id="btnShowToHide">模态框打开2秒后隐藏模态框方法</button>
<!-- 通过js编程方式调用模态框 -->
<script>
//模态框show和hide方法
$('#btnShowToHide').on('click',function(){
$('#myModal').modal('show'); //调用show方法 显示模态框
setTimeout(function(){
$('#myModal').modal('hide'); //2秒后调用hide方法 隐藏模态框
},2000);
})
});
</script>
8、模态框的事件
Bootstrap 的模态框类提供了一些事件用于监听并执行你自己的代码。
- show.bs.modal 模态框显示之前(show方法调用之后立即触发该事件)
- shown.bs.modal 模态框显示之后(此事件在模态框已经显示出来(并且同时在 CSS 过渡效果完成)之后被触发)
- hide.bs.modal 模态框被关闭之前(hide方法调用之后立即触发该事件)
- hidden.bs.modal 模态框被关闭之后(此事件在模态框被隐藏(并且同时在 CSS 过渡效果完成)之后被触发)
<!-- 模态声明 -->
<div class="modal fade" id="myModal">
...
</div>
<!-- 调用模态框 -->
<button class="btn btn-primary" id="openModal" >弹出模态框(通过js编程)</button>
<!-- 通过js编程方式调用模态框 -->
<script>
$(function(){
// 模态框事件
$('#myModal').on('show.bs.modal',function(){
alert('模态框即将被显示');
});
$('#myModal').on('shown.bs.modal',function(){
alert('模态框已经显示');
});
$('#myModal').on('hide.bs.modal',function(){
alert('模态框即将被隐藏');
});
$('#myModal').on('hidden.bs.modal',function(){
alert('模态框已经隐藏');
});
});
</script>
完整的代码
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <!-- HTML5文档类型 -->
5 <meta charset="utf-8">
6 <!-- 移动端适配 -->
7 <meta name="viewport" content="width=device-width,initial-scale=1.0">
8 <!-- 让IE浏览器使用最新的引擎渲染页面 -->
9 <mata http-equiv="X-UA-Compatible" content="IE=edge">
10 <!-- Bootstrap3核心css库 -->
11 <link rel="stylesheet" href="css/bootstrap-v3.css">
12 <!-- jquery核心js库 -->
13 <script src="js/jquery.js"></script>
14 <!-- Bootstrap3核心js库 -->
15 <script src="js/bootstrap-v3.js"></script>
16 <title>bootstrap插件</title>
17 <style>
18 body{
19 padding: 20px;
20 }
21 </style>
22 </head>
23 <body>
24 <!-- 模态框 -->
25
26 <!-- 模态声明 -->
27 <div class="modal fade" id="myModal">
28 <!-- 窗口声明 -->
29 <div class="modal-dialog">
30 <!-- 内容声明 -->
31 <div class="modal-content">
32 <!-- 模态框内容的头部 -->
33 <div class="modal-header">
34 <!-- data-dismiss表示关闭插件modal -->
35 <button type="button" class="close" data-dismiss="modal"><span>×</span></button>
36 <h4 class="modal-title">模态框标题</h4>
37 </div>
38 <!-- 模态框内容的主体部 -->
39 <div class="modal-body">
40 <p>这是模态框的主题内容</p>
41 <!-- 水平方向排列的表单 -->
42 <div class="form-horizontal">
43 <!-- 表单组1 -->
44 <div class="form-group">
45 <label class="col-sm-3">用户名</label>
46 <div class="col-sm-6">
47 <input type="text" class="form-control" placeholder="请输入用户名">
48 </div>
49 <label class="col-sm-3 control-label text-danger">*不可为空</label>
50 </div>
51 <!-- 表单组2 -->
52 <div class="form-group">
53 <label class="col-sm-3">密码</label>
54 <div class="col-sm-6">
55 <input type="password" class="form-control" placeholder="请输入密码">
56 </div>
57 <label class="col-sm-3 control-label text-danger">*不可为空</label>
58 </div>
59 </div>
60 </div>
61 <!-- 模态框内容的底部 -->
62 <div class="modal-footer">
63 <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
64 <button type="button" class="btn btn-primary">确定</button>
65 </div>
66 </div>
67 </div>
68 </div>
69
70 <!-- 调用模态框的两种方式 -->
71 <!-- 按钮添加id -->
72 <button class="btn btn-primary" id="openModal" >弹出模态框(通过js编程)</button>
73
74 <!-- 通过data属性调用模态框 -->
75 <button class="btn btn-primary" data-toggle="modal" data-target="#myModal" data-backdrop="false" data-keyboard="true" data-show="true">弹出模态框(通过data属性)</button>
76
77 <!-- 模态框的方法 -->
78 <button class="btn btn-primary" id="btnShow">模态框show方法</button>
79
80 <!-- 模态框的方法 -->
81 <button class="btn btn-primary" id="btnToggle">模态框toggle方法</button>
82
83 <!-- 模态框的方法 -->
84 <button class="btn btn-primary" id="btnShowToHide">模态框打开2秒后隐藏模态框方法</button>
85
86 <!-- 通过js编程方式调用模态框 -->
87 <script>
88 $(function(){
89 //模态框参数设置
90 $('#openModal').on('click',function(){
91 $('#myModal').modal({ //调用模态框 并设置参数
92 backdrop:false,
93 keyboard:true,
94 show:true
95 });
96 });
97 // 模态框show方法
98 $('#btnShow').on('click',function(){
99 $('#myModal').modal('show'); //调用show方法 显示模态框
100 })
101 //模态框toggle方法
102 $('#btnToggle').on('click',function(){
103 $('#myModal').modal('toggle'); //调用toggle方法 切换显示模态框
104 })
105 //模态框show和hide方法
106 $('#btnShowToHide').on('click',function(){
107 $('#myModal').modal('show'); //调用show方法 显示模态框
108 setTimeout(function(){
109 $('#myModal').modal('hide'); //2秒后调用hide方法 隐藏模态框
110 },2000);
111 })
112 // 模态框事件
113 $('#myModal').on('show.bs.modal',function(){
114 alert('模态框即将被显示');
115 });
116 $('#myModal').on('shown.bs.modal',function(){
117 alert('模态框已经显示');
118 });
119 $('#myModal').on('hide.bs.modal',function(){
120 alert('模态框即将被隐藏');
121 });
122 $('#myModal').on('hidden.bs.modal',function(){
123 alert('模态框已经隐藏');
124 });
125 });
126 </script>
127 </body>
128 </html>