【发布时间】:2022-02-05 15:50:32
【问题描述】:
我正在尝试制作一个粘性标题。我在正文中添加了一个等于标题高度的 padding-top 值,以防止跳跃(因为从相对于固定的位置开始)。但是由于汉堡图标在断点 992 之后标题高度发生了变化,因此我需要相应地更新此填充值。但我无法做到。不确定我应该在哪里以及如何添加调整大小事件侦听器。请注意,固定的标题高度也不同,但它不应该影响这个 body padding-top 值。到目前为止,这是我的代码:https://codepen.io/penplaycode/pen/YzEWJGB
为了理解这个问题,在codepen示例中,首先检查桌面视图,向下滚动一点,你会注意到标题在滚动100px后固定在顶部,没有跳转,一切正常。但是如果你调整窗口大小直到看到汉堡图标,然后滚动 100px 以启用固定标题,你会看到内容有轻微的跳跃。因为标题高度是根据桌面视图计算的,因此正在添加的正文填充值就是这个值,但是我需要它在调整大小后重新计算标题高度并将这个新值应用到正文作为填充顶部。
var navbar = document.querySelector(".navbar");
var navbarClass = navbar.classList;
var navbarH = navbar.offsetHeight;
var scrollOffset = 500;
function setPadding(e) {
if (e.currentTarget.pageYOffset > scrollOffset) {
document.body.style.paddingTop = navbarH + "px";
} else {
document.body.style.paddingTop = "";
}
}
window.addEventListener("scroll", (e) => {
if (
navbarClass.contains("transparent") &&
navbarClass.contains("navbar-light")
) {
if (e.currentTarget.pageYOffset > scrollOffset) {
navbar.classList.add("fixed");
} else {
navbar.classList.remove("fixed");
}
if (!navbarClass.contains("position-absolute")) {
setPadding(e);
}
} else {
if (e.currentTarget.pageYOffset > scrollOffset) {
navbar.classList.add("fixed");
} else {
navbar.classList.remove("fixed");
}
setPadding(e);
}
});
【问题讨论】:
-
你的导航栏没有粘性,应该有 .navbar { 只有这样导航栏才会粘性
-
@Vaibhavv 是的。我在滚动到某个点后添加 .fixed 类,这使它通过 CSS 变得粘/固定。你检查过我的 codepen 示例了吗?
-
是的,我检查了你的 codepen。当我删除 .fixed 导航栏时,固定在顶部。
-
@Vaibhavv 我不明白你的建议。这不能回答我的问题。在将窗口大小调整到某个断点后,我需要帮助计算新的标题高度
标签: javascript html css scroll resize