更改高度时跳动的导航栏(粘性 属性)
Jumpy Nav bar upon changing height (sticky property)
我遇到了一个不知道如何处理的奇怪问题。
我基本上想在用户开始向下滚动页面时减小导航栏的大小,但由于高度的这种变化,导航栏会产生跳跃效果,如果页面的高度是可用高度的 100% space + 轻微滚动,导航栏有点卡在两种状态之间。问题在底部说明。
我曾尝试在将 scrolled
状态设置为 true 之前以编程方式滚动页面以防止导航栏调整大小,但这太糟糕了。
这是我的 window.onscroll 活动:
handleScroll = () => {
const { scrolled } = this.state;
console.log(window.scrollY, window.pageYOffset);
if (window.pageYOffset >= 10 && !scrolled) {
this.setState({ scrolled: true });
} else if (window.pageYOffset == 0 && scrolled) {
this.setState({ scrolled: false });
}
};
这是我的 css:
nav {
height: 150px;
background: black;
color: white;
transition: all 0.2s ease-in;
position: sticky;
}
nav.scrolled {
height: 80px;
}
我遇到了类似的挑战,我想将导航从静态位置移动到固定位置。因此导航在页面上处于静态位置,一旦用户到达断点,导航将变为固定位置,因此它始终可见并位于屏幕顶部。此外,高度也发生了变化。
我对此的解决方案,因为主要问题是整个页面高度的变化,添加一个占位符元素与导航的确切高度,并在导航变得粘滞时立即显示它。
所以解决办法就是,保证整体高度不变。
例如,如果您将 css 更改为此,您不应该看到这种效果(不是我建议的解决方案!),因为您不会更改整体高度,因此您不会触发多个滚动和重新呈现问题:
nav {
height: 150px;
padding-bottom: 0;
background: black;
color: white;
transition: all 0.2s ease-in;
position: sticky;
}
nav.scrolled {
height: 80px;
padding-bottom: 70px;
}
如果在切换 scrolled
的状态时放置一些 console.log
,您可以获得更好的见解。
我遇到了一个不知道如何处理的奇怪问题。
我基本上想在用户开始向下滚动页面时减小导航栏的大小,但由于高度的这种变化,导航栏会产生跳跃效果,如果页面的高度是可用高度的 100% space + 轻微滚动,导航栏有点卡在两种状态之间。问题在底部说明。
我曾尝试在将 scrolled
状态设置为 true 之前以编程方式滚动页面以防止导航栏调整大小,但这太糟糕了。
这是我的 window.onscroll 活动:
handleScroll = () => {
const { scrolled } = this.state;
console.log(window.scrollY, window.pageYOffset);
if (window.pageYOffset >= 10 && !scrolled) {
this.setState({ scrolled: true });
} else if (window.pageYOffset == 0 && scrolled) {
this.setState({ scrolled: false });
}
};
这是我的 css:
nav {
height: 150px;
background: black;
color: white;
transition: all 0.2s ease-in;
position: sticky;
}
nav.scrolled {
height: 80px;
}
我遇到了类似的挑战,我想将导航从静态位置移动到固定位置。因此导航在页面上处于静态位置,一旦用户到达断点,导航将变为固定位置,因此它始终可见并位于屏幕顶部。此外,高度也发生了变化。
我对此的解决方案,因为主要问题是整个页面高度的变化,添加一个占位符元素与导航的确切高度,并在导航变得粘滞时立即显示它。
所以解决办法就是,保证整体高度不变。
例如,如果您将 css 更改为此,您不应该看到这种效果(不是我建议的解决方案!),因为您不会更改整体高度,因此您不会触发多个滚动和重新呈现问题:
nav {
height: 150px;
padding-bottom: 0;
background: black;
color: white;
transition: all 0.2s ease-in;
position: sticky;
}
nav.scrolled {
height: 80px;
padding-bottom: 70px;
}
如果在切换 scrolled
的状态时放置一些 console.log
,您可以获得更好的见解。