在内容加载后垂直重新居中引导模式
Re-center bootstrap modal vertically after content has loaded
我已经成功地使用解决方案来居中一个引导模态:
演示: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;
但是,它不能很好地处理远程加载的内容。它在内容加载前计算高度。然后,在内容加载之后,位置就偏离了。
我尝试了各种方法将计算延迟一段时间,但这些方法导致模态加载在页面顶部,然后跳到中间。
似乎最好的解决方案是在内容加载后重新计算高度。这样,较小的模态(没有内容)将在中心加载,然后在内容加载后重新居中。
是否有好的方法来做到这一点?
根据文档,有一个名为loaded.bs.modal
的方法,其中事件'…当模态使用remote选项加载了内容时触发。
那么在你的代码中,它应该是这样的:
$('#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
根据注释更新
在计算宽度之前显示模态&高度,然后在得到它们后将其居中。你不能从隐藏对象中获得维度,因为它们在显示之前没有任何维度。你必须添加一个类的模式标记,这样你就可以设置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');
});
相关文章:
- 显示模块模式在Knockout中设置模型的新实例
- jQuery自动完成标记新的标签设计模式
- jQuery模式窗口在内容为“”时不居中;注入“;在飞行中
- 这是一个新的javascript工厂模式吗
- 防止模式背景覆盖在每个打开的新模式上变得更暗
- 以新模式访问作用域形式ng repeat
- 使用弹出模式中断k-pager-nav以确认/拒绝移动到新页面
- 使用Geolocation以引导模式加载地图,标记不会居中
- 使用模块模式时,如何创建对象的新实例
- 将 UI 模式对话框添加到新的 DIV 标记
- 当模态有时大于屏幕时,我如何水平/垂直居中模式弹出窗口
- 用于初始化对象的编码模式 - 构造函数(新)与 Object.create()(Crockford)
- 如何在 Crockford 的新构造函数模式中共享“构造函数”功能
- 模式未使用新数据刷新
- 了解 Javascript 中的类和继承 - 新模式
- Twitter 引导模式出现在错误的位置,未居中且按钮不可单击
- 打开一个新页面作为模式窗口
- 防止引导模式窗口在新选项卡/窗口中打开
- 创建新模型的正确控制器/视图模式是什么
- 在IE8中工作的居中模式