javascript - 样式化组件:在滚动时传递状态
问题描述
我正在尝试将道具传递给滚动样式的组件,但它似乎没有任何效果(即使滚动侦听器有效)。有谁知道我哪里出错了?
const Box = styled('div')(
`
${props => props.scroll && css`
background-color: pink;
`};
`
);
const [scroll, setScrolled] = useState(false);
const scrollHandler = useCallback(() => {
if (window.pageYOffset > 100) {
setScrolled(true);
}
if (window.pageYOffset < 100) {
setScrolled(false);
}
}, []);
useEffect(() => {
window.addEventListener('scroll', scrollHandler);
}, [scrollHandler]);
return(
<Box scroll={scroll}>test</Box>
)
解决方案
您如何使用styled-component
这是主要问题没有任何问题。
可能不起作用的是您的事件侦听器,您应该侦听元素的onScroll
事件而不是全局事件,window
这可能会产生一些意想不到的结果,这是一个工作示例:
const Box = styled.div`
background-color: ${({ scroll }) => (scroll ? `palegoldenrod` : `pink`)};
height: 100px;
overflow: auto;
`;
export default function App() {
const [scroll, setScrolled] = useState(false);
useEffect(() => {
setTimeout(() => { setScrolled(false) }, 1000);
}, [scroll]);
return (
<Box
scroll={scroll}
onScroll={() => {
setScrolled(true);
}}
>
<span>
Lorem ipsum faucibus facilisis per nisi pharetra vel, rhoncus mattis
scelerisque consequat fermentum integer, mauris varius orci facilisis
aptent dictumst orci quis urna semper mollis risus. Sit tristique tempus
posuere pharetra morbi felis et duis quisque convallis est, quisque
tellus magna eleifend sed augue nulla dolor consequat accumsan, netus
elementum luctus eget interdum quisque tempor euismod sem donec.
Habitasse class aliquam risus non lacinia a scelerisque vivamus
fermentum, consequat scelerisque diam nibh volutpat eros sociosqu
praesent pretium tristique, nisl curae malesuada vestibulum etiam purus
curabitur arcu. In nostra torquent porttitor varius nam nisl ornare,
aptent amet sit erat dolor platea, imperdiet at bibendum euismod
condimentum ut interdum id eleifend eu eros semper cubilia sagittis.
Praesent diam pretium class nostra semper augue nulla senectus
adipiscing aliquet, habitant nisi lacinia ultricies aenean orci
condimentum posuere et sollicitudin eu aenean placerat feugiat nibh duis
proin curae.
</span>
</Box>
);
}
推荐阅读
- python - Google Cloud Vertex AI - 模型不支持 400 'dedicated_resources'
- javascript - vuejs 在一个元素上使用多个 v-if
- javascript - Javascript中函数变量的语法错误
- java - Quartz 作业调度程序不会在 Docker 上停止
- kubernetes - StatefulSet 的 Pod 名称解析不起作用
- javascript - JavaScript:如何在滚动期间更好地指示(突出显示)当前导航页面,而不是仅使用“scrollY > x”
- java - 为什么 Hibernate 插入我的实体而不是更新它?
- ssl - 带有 SSL 的 Socket.io 在 OSx 环境中显示错误
- html - 最好在哪里指定表格的宽度 - 在 HTML 或 CSS 类中?
- python - X 轴标签未显示在条形图上