【发布时间】:2018-10-31 10:48:03
【问题描述】:
我遇到了一个奇怪的问题,我不知道如何处理。
我基本上想在用户开始向下滚动页面时减小导航栏的大小,但是由于高度的这种变化,导航栏会产生跳跃效果,如果页面的高度是可用空间的 100% + 轻微滚动,导航栏有点卡在两个状态之间。问题在底部说明。
在将 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;
}
【问题讨论】:
-
是的,改变 y 偏移量,因为上面的元素在聆听时会改变高度,这肯定会导致错误。我认为您需要将灵活高度导航的高度锁定在顶部。此链接还将帮助您稍微清理滚动侦听器:html5rocks.com/en/tutorials/speed/animations 另外,也许不要使用元素的 y 偏移量,而是使用其上方元素的高度总和。
-
只是一个建议。也将过渡添加到 nav.scrolled。
-
@admcfajn 我去看看
标签: javascript css reactjs sticky