【发布时间】:2022-01-26 17:17:01
【问题描述】:
我一直在尝试使用样式化组件动画来使导航栏在向下滚动时改变颜色,并在我向上滚动时将其恢复为原始颜色。我目前面临的唯一问题是,我不知道如何仅在向下滚动页面时触发它,并在我再次点击顶部时将其恢复正常。
const ChangeColor = keyframes`
0%{
background-color: #121314;
}
100%{
background-color: white;
}
`;
const GeneralContainer = styled.body`
background-color: #121314;
height: 10000px;
margin: 0;
`;
const NavBarContainer = styled.div`
border: 1px green solid;
height: 64px;
position: fixed;
width: 100%;
animation: ${NavForward} 1s linear alternate forwards 1; //I just want this to fire once when I scroll downward and fire again when I return to the top of the page.
`;
export default function Home() {
const [offset, setOffset] = useState(0);
const [isUpper, setIsUpper] = useState(true); // was trying to use this to trigger but couldnt
useEffect(() => {
const onScroll = () => {
setOffset(window.pageYOffset);
if (window.pageYOffset > 30 && isUpper === true) {
setIsUpper(false);
} else if (window.pageYOffset <= 30 && isUpper === false) {
setIsUpper(true);
}
};
// clean up code
window.removeEventListener("scroll", onScroll);
window.addEventListener("scroll", onScroll, { passive: true });
return () => window.removeEventListener("scroll", onScroll);
}, []);
return (
<GeneralContainer>
<NavBarContainer
isUpper={isUpper}
scoll={offset}
></NavBarContainer>
</GeneralContainer>
);
}
【问题讨论】:
标签: css reactjs css-animations styled-components