【发布时间】:2019-12-12 19:51:12
【问题描述】:
场景:我正在处理的项目要求将内容异步加载到 Bootstrap 3 模式中,并向用户显示加载指示。实际加载不是问题(请参阅下面的 Codepen),但是当加载的内容很大时,在 iOS 9 设备上滚动是个问题。它在我尝试过的所有其他设备上都能正常工作,包括 iOS 8。我认为 DOM 不会更新 的滚动高度,因此它认为模式不应该是可滚动的。
我发现可靠工作(但不可接受)的唯一解决方法是隐藏/显示模态框的主体,从而强制重新计算。 Bootstrap 自己的 handleUpdate 函数无法解决此问题。
我在 Codepen 上创建了一个最小示例 http://codepen.io/jkrehm/full/LpRzJV/(代码可用 here)。我希望我可以在我的问题中嵌入一个二维码,这样你就可以在手机上轻松找到它。
最相关的代码是这样的:
// Show loader & then get content when modal is shown
$modal.on('show.bs.modal', function(e) {
$(this).find('.modal-body')
.html('loading...')
.load('https://baconipsum.com/api/?type=meat-and-filler¶s=10', function() {
// Use Bootstrap's built-in function to fix scrolling (to no avail)
$modal.modal('handleUpdate');
});
});
如果我更改代码以便在显示模式之前加载内容,一切正常,但没有为用户提供加载指示器(只是在他们单击按钮后暂停了不确定长度在模态出现之前)。
总结:如何说服 iOS 9 重新计算 .modal-body 的滚动高度?
更新(2017 年 8 月 15 日):
显然,这个问题没有令人满意的解决方案。 Bootstrap 已从模态框中选择了remove-webkit-overflow-scrolling:touch,并为此向 Webkit 提交了bug。也许有一天会修好,也许不会。目前,提供的解决方法是最好的“解决方案”。
【问题讨论】:
-
这不是那个问题的重复,尽管答案可能会解决它。根本问题是浏览器错误 (bugs.webkit.org/show_bug.cgi?id=158342)。 Bootstrap 没有解决方案,因此他们不得不完全删除
-webkit-overflow-scrolling:touch(github.com/twbs/bootstrap/pull/20803)。
标签: javascript jquery ios css twitter-bootstrap