描述
我正在为我已经实现的一些东西而挣扎,它基本上是一个依赖于监视其scrollYOffset状态的useEffect的粘性头,但是一旦我重新加载页面,它就不会识别,直到我再次滚动。
屏幕截图
重新加载
后滚动
后
源代码
const Header = () => {
const [isSticky, setSticky] = useState(false)
useSSRLayoutEffect(() => {
window.addEventListener(
'scroll',
() => {
if (window.pageYOffset > 54) {
setSticky(true)
} else {
setSticky(false)
}
},
{ passive: true }
)
}, [])
return (
<>
<header
className={cx(
'fixed top-0 z-10 flex w-full flex-col items-center justify-center transition-all',
isSticky
? 'bg-black bg-opacity-60 backdrop-blur'
: 'bg-transparent pt-4'
)}
>
...
</header>
</>
)
}
export default Header
1条答案
按热度按时间iovurdzv1#
在挂载组件时,您可能还需要调用传递给scroll事件处理程序的函数。
最简单的方法是将逻辑抽象为一个单独的函数,并在滚动时和效果回调运行时调用它:
但是,如果必须等待浏览器先运行布局以确保获得最终滚动位置,则需要调用
useEffect
中的函数: