【发布时间】:2019-12-10 06:21:58
【问题描述】:
我希望在导航页面上的内容滚动时在导航上添加阴影,以便更轻松地显示内容和导航之间的差异。阴影也应该应用过渡以使其更平滑。
在滚动到断点上方后将框阴影应用于导航时,投影的过渡不起作用。但是,当将相同的样式应用于悬停选择器时,过渡会起作用。
我在项目中使用 gatsby,但这是一个 react/js 问题,只是说在使用 gatsby 将其应用于项目时是否有任何注意事项。
请注意,我正在使用 styled-components 来设置组件的样式。我正在使用“CSS: ${condition && css-style}”语法进行条件渲染,该语法适用于样式化组件。
我已经尝试过使用动画,效果很好,但每次滚动页面时都会运行。
class App extends Component {
constructor() {
super();
this.state = {
scrollPos: 0
};
}
componentDidMount() {
window.addEventListener("scroll", this.updateScroll);
this.updateScroll();
}
componentWillUnmountt() {
window.removeEventListener("scroll", this.updateScroll);
}
updateScroll = () =>
this.setState({ scrollPos: document.documentElement.scrollTop });
render() {
let breakpointScroll = 20;
const Header = styled.div`
position: fixed;
width: 100vw;
height: 90px;
background-color: white;
font-size: 26px;
color: coral;
text-align: center;
transition: all 200ms ease;
/* Problem here */
box-shadow: ${this.state.scrollPos >= breakpointScroll &&
"0px 1px 5px rgba(0, 0, 0, 0.25)"};
/* This seems to work perfect */
:hover {
box-shadow: 0px 1px 5px rgba(0, 0, 0, 0.25);
}
`;
return (
<>
<Header>Header</Header>
<Text>Scroll position: {this.state.scrollPos}</Text>
{/* IGNORE, content for scroll */}
<Box />
<Box backgroundColor="lightblue" />
<Box />
{/* IGNORE, content for scroll */}
</>
);
}
}
【问题讨论】:
标签: javascript css reactjs gatsby styled-components