zoukankan      html  css  js  c++  java
  • bootstrap modal垂直居中(简单封装)

    1.使用modal 弹出事件方法;

    未封装前:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <link rel="stylesheet" href="css/bootstrap.min.css">
        <script src="js/jquery.min.js"></script>
        <script src="js/bootstrap.js"></script>
    </head>
    <body>
    
    <button type="button" id="modalBtn" class="btn btn-primary">点击弹出modal</button>
    
    <div class="modal fade" id="myModal">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                    <h4 class="modal-title">Modal 标题</h4>
                </div>
                <div class="modal-body">
                    <p>内容&hellip;</p>
                    <p>内容&hellip;</p>
                    <p>内容&hellip;</p>
    
                </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>
    
    
    <script type="text/javascript">
        $(function(){
            var $m_btn = $('#modalBtn');
            var $modal = $('#myModal');
            $m_btn.on('click', function(){
                $modal.modal({backdrop: 'static'});
            });
    
            $modal.on('show.bs.modal', function(){
                var $this = $(this);
                var $modal_dialog = $this.find('.modal-dialog');
                // 关键代码,如没将modal设置为 block,则$modala_dialog.height() 为零
                $this.css('display', 'block');
                $modal_dialog.css({'margin-top': Math.max(0, ($(window).height() - $modal_dialog.height()) / 2) });
            });
    
        });
    </script>
    
    </body>
    </html>

    封装后:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <link rel="stylesheet" href="css/bootstrap.min.css">
        <script src="js/jquery.min.js"></script>
        <script src="js/bootstrap.js"></script>
    </head>
    <body>
    
    <button type="button" id="modalBtn" class="btn btn-primary">点击弹出modal</button>
    
    <div class="modal fade" id="myModal">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                    <h4 class="modal-title">Modal 标题</h4>
                </div>
                <div class="modal-body">
                    <p>内容&hellip;</p>
                    <p>内容&hellip;</p>
                    <p>内容&hellip;</p>
    
                </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>
    
    <script type="text/javascript">
        $(function(){
            $('#myModal').myfunction({
                $m_btn:$('#modalBtn'),  //触发事件元素
                $modal:$('#myModal'),   //响应事件元素
                eventType:'click'     //事件类型
            });
        });
        ;(function ($) {
            $.fn.myfunction=function (options) {
                var defaults={
                    $m_btn : $('#modalBtn'),
                    $modal : $('#myModal'),
                    eventType:'click'
                };
                var setting=$.extend({},defaults,options);
                this.each(function(){
                    var my_btn = setting.$m_btn;
                    var _modal = setting.$modal;
                    var _event = setting.eventType;
                    my_btn.on(_event, function(){
                        _modal.modal({backdrop: 'static'});
                    });
    
                    _modal.on('show.bs.modal', function(){
                        var $this = $(this);
                        var $modal_dialog = $this.find('.modal-dialog');
                        $this.css('display', 'block');
                        $modal_dialog.css({'margin-top': Math.max(0, ($(window).height() - $modal_dialog.height()) / 2) });
                    });
                });
            }
        })(jQuery);
    </script>
    
    </body>
    </html>

    2.修改bootstrap.js 源码;

    打开bootstrap.js ctrl+f 找到 modal对应代码:

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

    加上少量代码:

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

    然后就实现modal垂直居中了, 效果图:

  • 相关阅读:
    python之模块与包
    python之模块4
    python之模块3
    python之模块2
    Day10:Linux基础:搭建samba服务
    Day9:Linux基础:程序管理
    Day8: Linux基础片:网络配置
    番外篇:硬盘分区、创建文件系统
    Day7: Linux基础片:系统监控
    Day6: Linux基础片:文件压缩、Vim用法
  • 原文地址:https://www.cnblogs.com/hjbky/p/7350523.html
Copyright © 2011-2022 走看看