【问题标题】:Re-center bootstrap modal vertically after content has loaded加载内容后垂直重新居中引导模式
【发布时间】:2014-08-22 18:56:18
【问题描述】:

我已使用此处找到的解决方案成功地使引导模式居中:

演示:http://codepen.io/dimbslmh/full/mKfCc 代码:http://codepen.io/dimbslmh/pen/mKfCc

var contentHeight = $(window).height() - 60;
var headerHeight = $(this).find('.modal-header').outerHeight() || 2;
var footerHeight = $(this).find('.modal-footer').outerHeight() || 2;

但是,它不适用于远程加载的内容。它在加载内容之前计算高度。那么,加载完内容后,位置就偏了。

我尝试了各种方法将计算延迟设定的时间,但这些方法导致模态加载在页面顶部,然后跳到中心。

似乎最好的解决方案是在加载内容后让它重新计算高度。这样,较小的模态(没有内容)将在中心加载,然后在加载内容后重新居中。

有什么好办法吗?

【问题讨论】:

  • 你需要使用你所拥有的,但在 AJAX 请求的“成功”回调中。
  • 通过简单地向模态链接添加一个href,将内容加载到模态中。 (例如:)我是否需要以编程方式打开它才能使用成功回调?
  • 我尝试将我拥有的内容放入 "$('.modal').on('shown.bs.modal', function () {" 但这打破了居中。
  • 你需要loaded.bs.modal

标签: javascript jquery twitter-bootstrap


【解决方案1】:

根据the docs,有一个名为loaded.bs.modal 的方法,其中事件'...在模态使用远程选项加载内容时触发。'

所以你的代码应该是这样的:

$('#myModal').on('loaded.bs.modal', function () {
  var contentHeight = $(window).height() - 60;
  var headerHeight = $(this).find('.modal-header').outerHeight() || 2;
  var footerHeight = $(this).find('.modal-footer').outerHeight() || 2;
});

这是应该可以工作的 PEN 的一个分支(尚未使用远程源进行测试)http://codepen.io/craigmdennis/pen/fChIm

基于 cmets 更新。

它在计算宽度和高度之前显示模态,然后在得到它们后将其居中。您无法从隐藏对象中获取尺寸,因为它们在显示之前没有任何尺寸。您必须向模态标记添加一个类,以便您可以设置 visibility: hidden;z-index: -99;(因此它是不可见的,并且位于任何内容后面,因此不可点击)然后在触发 loaded.bs.modal 事件时删除该类。

在 CSS 中:

.invisible {
  visibility: hidden;
  position: absolute; /* It will already have a position declaration */
  z-index: -99;
}

然后在 JavaScript 中:

$('#myModal').on('loaded.bs.modal', function () {
  var contentHeight = $(window).height() - 60;
  var headerHeight = $(this).find('.modal-header').outerHeight() || 2;
  var footerHeight = $(this).find('.modal-footer').outerHeight() || 2;

  $(this).removeClass('invisible');
});

【讨论】:

  • 谢谢克雷格!我不知道我怎么错过了加载的事件!我尝试了这个,并且能够通过将整个adjustsize函数与loaded.bs.modal函数包装起来让它工作。然而,它仍然做同样的事情——模式首先在浏览器的顶部加载,然后向下移动到中心。我试图弄清楚如何让它两次加载到中心。我尝试重复该功能,一次在“show.bs.modal”上,再次在“loaded.bs.modal”上,但它仍然做同样的事情。
  • 它在计算高度之前显示模态,然后在获得高度后将其居中。
  • 谢谢!这是有道理的。我需要移动“loaded.bs.modal”以包围整个函数,但除此之外,这成功了。非常感谢您的帮助。
  • 当单击 codepen codepen.io/craigmdennis/pen/fChIm 上的任何模态按钮时,模态现在会显示,但只有类中的 .modal-backdrop 和 .fade 会使预览变暗。您的 codepen 在您首次发布时是否正常工作?在最新版本的 Chrome 和 Firefox 上测试。也许你可以检查一下自己,让我知道它是否对你有用?谢谢。
  • 顺便说一句,这帮助我回答了我的一个问题:stackoverflow.com/questions/28707548/… 虽然我没有使用隐形类和事件显示.bs.modal。所以谢谢你为我指明了正确的方向。如果您知道为什么我的第一种方法没有奏效,请在回答或评论我的问题时告诉我。完全理解其背后的逻辑会很棒。谢谢。
猜你喜欢
  • 1970-01-01
  • 2015-05-13
  • 2017-08-16
  • 2015-11-04
  • 2017-05-25
  • 1970-01-01
  • 1970-01-01
  • 2019-04-15
  • 2016-07-14
相关资源
最近更新 更多