Popper.js dropdown/tooltip 的初始位置错误
Popper.js wrong initial position of dropdown/tooltip
如果点击触发器,我正在使用 popper.js 显示更多 post 类别。但是我点击之后,初始位置是错误的(更右)。当 popper 打开并且我滚动 popper 的位置时更新 - 这个状态需要是初始的。
我发现 CSS popper 的位置变换计算错误,不适合我的使用。但不明白,为什么它在滚动或任何 window 调整大小后重新计算为正确的数字。查看下面的 Codepen。
我的 JS:
$(function () {
var element = document.getElementById('more-cats');
var dropdown = document.getElementById('tooltip');
var catsTooltip = new Popper ( element, dropdown, {
placement: 'bottom-end'
});
$(element).click(function(e) {
$(dropdown).toggle();
e.preventDefault();
});
});
谢谢,如果有什么想法,请问我哪部分代码写错了。
那是因为 Popper.js 需要在 DOM 中呈现 popper 元素(也就是在文档中有一个位置)才能正确计算其位置。
您在元素隐藏时初始化 Popper.js,然后切换其可见性以显示它,但 Popper.js 不知道发生了什么变化。
当您滚动页面或调整页面大小时,Popper.js 会更新弹出器的位置,因为它默认会侦听这些事件。
您应该在 .toggle()
之后手动 运行 catsTooltip.scheduleUpdate()
以使其正确定位。
只是想分享我为我的工作所做的工作,以防万一它能帮助到其他人。
我认为@Fez 和@Abdalla 的解决方案可能仍然有用,但对我来说,这与意外使用 display: none;
作为我的工具提示容器有关。 Amazing what the documentation can do lol.
所以我对 .tooltip 容器所做的是这样的:
/* Hide the popper when the reference is hidden */
.tooltip[data-popper-reference-hidden] {
visibility: hidden;
pointer-events: none;
}
.tooltip {
// display: none; <---- don't do this
opacity: 1; // do this
background-color: white;
border: 1px solid #c6c6c6;
box-shadow: 1px 1px 8px 1px rgba(0, 0, 0, 0.2);
line-height: 1.5;
padding: 4px 8px;
border-radius: 4px;
z-index: -1; // this keeps it from blocking other elements when it's hidden
&:hover {
visibility: visible;
pointer-events: auto;
opacity: 1; // oh yeah
z-index: 1;
}
}
如果点击触发器,我正在使用 popper.js 显示更多 post 类别。但是我点击之后,初始位置是错误的(更右)。当 popper 打开并且我滚动 popper 的位置时更新 - 这个状态需要是初始的。
我发现 CSS popper 的位置变换计算错误,不适合我的使用。但不明白,为什么它在滚动或任何 window 调整大小后重新计算为正确的数字。查看下面的 Codepen。
我的 JS:
$(function () {
var element = document.getElementById('more-cats');
var dropdown = document.getElementById('tooltip');
var catsTooltip = new Popper ( element, dropdown, {
placement: 'bottom-end'
});
$(element).click(function(e) {
$(dropdown).toggle();
e.preventDefault();
});
});
谢谢,如果有什么想法,请问我哪部分代码写错了。
那是因为 Popper.js 需要在 DOM 中呈现 popper 元素(也就是在文档中有一个位置)才能正确计算其位置。
您在元素隐藏时初始化 Popper.js,然后切换其可见性以显示它,但 Popper.js 不知道发生了什么变化。
当您滚动页面或调整页面大小时,Popper.js 会更新弹出器的位置,因为它默认会侦听这些事件。
您应该在 .toggle()
之后手动 运行 catsTooltip.scheduleUpdate()
以使其正确定位。
只是想分享我为我的工作所做的工作,以防万一它能帮助到其他人。
我认为@Fez 和@Abdalla 的解决方案可能仍然有用,但对我来说,这与意外使用 display: none;
作为我的工具提示容器有关。 Amazing what the documentation can do lol.
所以我对 .tooltip 容器所做的是这样的:
/* Hide the popper when the reference is hidden */
.tooltip[data-popper-reference-hidden] {
visibility: hidden;
pointer-events: none;
}
.tooltip {
// display: none; <---- don't do this
opacity: 1; // do this
background-color: white;
border: 1px solid #c6c6c6;
box-shadow: 1px 1px 8px 1px rgba(0, 0, 0, 0.2);
line-height: 1.5;
padding: 4px 8px;
border-radius: 4px;
z-index: -1; // this keeps it from blocking other elements when it's hidden
&:hover {
visibility: visible;
pointer-events: auto;
opacity: 1; // oh yeah
z-index: 1;
}
}