bootstrap modal垂直居中

修改bootstrap.js 源码:

带着问题读js库源码, 往往能学到不少知识;本着怎样让 modal组件自动居中目的, 开始跟踪组件弹窗时对应的事件;
打开bootstrap.js ctrl+f 找到 modal对应代码:

var Modal = function (element, options) { 
}
Modal.VERSION = '3.3.2'
Modal.TRANSITION_DURATION = 300
Modal.BACKDROP TRANSITION_DURATION = 150
Modal.DEFAULTS = {
}
Modal.prototype.toggle = function (_reLatedTarget) {
return this.isShown ? this.hide( ) : this.show(_relatedTarget)
}
Modal.prototype.show = function (_ relatedTarget) { 
}
Modal.prototype.hide = function (e) {
}
Modal.prototype.enforceFocus = function () {
}

弹出框出现时, 调用的自然是 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: ''
            })
}

以上代码看来,官方要实现 垂直居中简直太容易, 而他们没有, 只能说国外同行网站布局观跟俺们还是有区别的。加上少量代码:

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垂直居中了。

总结:

总的来说 两方案都能实现优雅的垂直居中效果,而实际网站开发中页面多弹出框自然不止一个;修改源码就不用在每个页面调用bootstrap事件,故本人更倾向于方案2。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 如何导入JavaScript插件? Bootstrap的JavaScript插件可以单独导入到页面中,也可以一次性...
    凛0_0阅读 7,937评论 0 10
  • 背景:在web开发中,modal框是很常用的组件,那如何在modal中加载后台数据? 开发环境: 模板引擎:vel...
    测试你个头阅读 11,469评论 0 7
  • 一、入门准备 二、整体架构 A.整体架构 1.CSS12栅格系统:以规则的网格阵列来指导和规范网页中的版面布已有以...
    ZyBlog阅读 1,108评论 0 1
  • css是层叠样式表,它是网页之皮 本文主要内容 1. 块级元素和行内元素 2. 常见css属性 宽高 边框 边距 ...
    饥人谷_喂鱼de猴子阅读 305评论 0 0
  • 近日有媒体透露,国产大客机C919,疑现重大安全隐患,全面停飞。那么,这么重大的安全隐患是怎么被发现的呢? 原来用...
    伯爵夫人Godiva阅读 308评论 0 0