阅读文档
Bootstrap 4 上的文档明确解决了这个问题并提供了解决方案:
溢出自动和滚动
当父容器溢出时,工具提示位置尝试自动更改:自动或溢出:像我们的 .table-responsive 一样滚动,但仍保持原始位置的定位。要解决此问题,请将边界选项设置为默认值“scrollParent”以外的任何值,例如“window”:
$('#example').tooltip({ boundary: 'window' })
所以我们必须将boundary
选项设置为'window'
.
从有关选项的文档中boundary
:
工具提示的溢出约束边界。接受 'viewport'、'window'、'scrollParent' 或 HTMLElement 引用的值(仅限 JavaScript)。有关更多信息,请参阅 Popper.js 的preventOverflow 文档。
最佳实践
话虽如此,在任何地方初始化工具提示的首选方法是'[data-toggle="tooltip"]'
用作选择器:
$('[data-toggle="tooltip"]').tooltip({ boundary: 'window' })
一劳永逸
现在,如果您正在向 DOM 动态添加或删除元素(带有工具提示),或者甚至在不重新加载它的情况下替换整个页面(即使用PJAX 之pushState
类的库) - 或者如果您只是使用模式(带有工具提示) - 你有(再次)初始化这些工具提示。
修复元素上的工具提示
这就是以下函数派上用场的地方,它会破坏并重新创建所有工具提示。在您向/从已附加工具提示的 DOM 添加/删除元素后调用此函数。
function recreateTooltips() {
$('[data-toggle="tooltip"]').tooltip('dispose').tooltip({boundary: 'window'});
}
这可能看起来很昂贵(当然确实如此),但即使在同一页面上有数十个工具提示,我也从未注意到任何性能影响。
修复模态中的工具提示
要修复模式中的工具提示,您只需将上面的函数绑定到'shown.bs.modal'
事件,该事件在模式完全显示给用户后触发。
/** Recreate tooltips upon showing modal */
$(document).on('shown.bs.modal', '*', function () {
recreateTooltips();
});