码迷,mamicode.com
首页 > 其他好文 > 详细

Bootstrap Modal(模态框)组件水平垂直居中

时间:2017-10-25 11:20:04      阅读:672      评论:0      收藏:0      [点我收藏+]

标签:href   set   bootstrap   element   bsp   table   加载   target   log   

此项目中的bootstrap版本是3.3.7 。 在某些项目进行过程中遇到组件模态框无法垂直居中,示例demo代码如下:

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <title>bootstrap modal 垂直居中测试</title>
 5     <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
 6     <meta charset="utf-8">
 7 </head>
 8 <body>
 9 
10 <button type="button" id="modalBtn" class="btn btn-primary">点击弹出modal</button>
11 
12 <div class="modal fade" id="myModal">
13     <div class="modal-dialog">
14         <div class="modal-content">
15             <div class="modal-header">
16                 <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
17                         aria-hidden="true">&times;</span></button>
18                 <h4 class="modal-title">Modal 标题</h4>
19             </div>
20             <div class="modal-body">
21                 <p>内容&hellip;</p>
22             </div>
23             <div class="modal-footer">
24                 <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
25                 <button type="button" class="btn btn-primary">确定</button>
26             </div>
27         </div><!-- /.modal-content -->
28     </div><!-- /.modal-dialog -->
29 </div><!-- /.modal -->
30 
31 <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
32 <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
33 
34 <script type="text/javascript">
35       $(function(){
36         // dom加载完毕
37         var $m_btn = $(#modalBtn);
38         var $modal = $(#myModal);
39         $m_btn.on(click, function(){
40           $modal.modal({backdrop: static});
41         });
42       });
43     </script> 
45 </body>
46 </html>

效果如下:

技术分享

2、说明:使用modal 弹出事件方法:

Bootstrap 的模态框类提供了一些事件用于监听并执行你自己的代码。

事件类型描述
show.bs.modal show 方法调用之后立即触发该事件。如果是通过点击某个作为触发器的元素,则此元素可以通过事件的 relatedTarget 属性进行访问。
shown.bs.modal 此事件在模态框已经显示出来(并且同时在 CSS 过渡效果完成)之后被触发。如果是通过点击某个作为触发器的元素,则此元素可以通过事件的 relatedTarget 属性进行访问。
hide.bs.modal hide 方法调用之后立即触发该事件。
hidden.bs.modal 此事件在模态框被隐藏(并且同时在 CSS 过渡效果完成)之后被触发。
loaded.bs.modal 远端的数据源加载完数据之后触发该事件。

 

 

 

 

 

 

 

 

$(‘#myModal‘).on(‘hidden.bs.modal‘, function (e) {
  // do something...
})

 

 

一、处理方式1

1、其中 “shown.bs.modal”可以在弹窗框出现后 做一些处理, 更改弹出框的样式当然是可以的:

 1 <script type="text/javascript">
 2       $(function(){
 3         // dom加载完毕
 4         var $m_btn = $(‘#modalBtn‘);
 5         var $modal = $(‘#myModal‘);
 6         $m_btn.on(‘click‘, function(){
 7           $modal.modal({backdrop: ‘static‘});
 8         });
 9         // 测试 bootstrap 居中
10         $modal.on(‘shown.bs.modal‘, function(){
11           var $this = $(this);
12           var $modal_dialog = $this.find(‘.modal-dialog‘);
13           var m_top = ( $(window).height() - $modal_dialog.height() )/2;
14           $modal_dialog.css({‘margin‘: m_top + ‘px auto‘});
15         });
16       });
17     </script>

该方式实现模态框居中了, 但是弹出时有一些迟疑后抖动到中部;不是特别理想, 接下来试试第二种方式;

2、方式2

 1 <script type="text/javascript">
 2       $(function(){
 3         // dom加载完毕
 4         var $m_btn = $(‘#modalBtn‘);
 5         var $modal = $(‘#myModal‘);
 6         $m_btn.on(‘click‘, function(){
 7           $modal.modal({backdrop: ‘static‘});
 8         });
 9 
10         // 测试 bootstrap 居中
11         $modal.on(‘show.bs.modal‘, function(){
12           var $this = $(this);
13           var $modal_dialog = $this.find(‘.modal-dialog‘);
14           // 关键代码,如没将modal设置为 block,则$modala_dialog.height() 为零
15           $this.css(‘display‘, ‘block‘);
16           $modal_dialog.css({‘margin-top‘: Math.max(0, ($(window).height() - $modal_dialog.height()) / 2) });
17         });
18         
19       });
20     </script>

二、处理方式2(bootstrap源文件更改)

技术分享

 

弹出框出现时, 调用的自然是 Modal.prototype.show() 方法, 而show 方法中又调用了 that.adjustDialog() 方法:

技术分享

以上代码看来,官方要实现 垂直居中简直太容易, 而他们没有。加上少量代码:

 1 Modal.prototype.adjustDialog = function () {
 2     var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
 3 
 4     this.$element.css({
 5       paddingLeft:  !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : ‘‘,
 6       paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ‘‘
 7     })
 8     // 是弹出框居中。。。
 9     var $modal_dialog = $(this.$element[0]).find(‘.modal-dialog‘);
10     var m_top = ( $(window).height() - $modal_dialog.height() )/2;
11     $modal_dialog.css({‘margin‘: m_top + ‘px auto‘});
12   }

最终效果图如下:

技术分享

 

Bootstrap Modal(模态框)组件水平垂直居中

标签:href   set   bootstrap   element   bsp   table   加载   target   log   

原文地址:http://www.cnblogs.com/jialinG/p/7725424.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!