问题描述
<div className="Box one" id="section1">
<div className="num">1</div>
</div>`enter code here`
<div className="Box two" id="section2">
<div className="num">2</div>
</div>
<div className="Box three" id="section3">
<div className="num">3</div>
</div>
<div className="Box four" id="section4">
<div className="num">4</div>
</div>
这是jsx代码,我们假设它与CSS垂直对齐,我只需要将滚动逻辑更改为verticall并获取滚动位置,因为我想使用滚动事件来触发抽奖动画
解决方法
使用React钩子。
const ScrollComponent = () => {
const section1 = useRef(null)
const section2 = useRef(null)
const section3 = useRef(null)
const section4 = useRef(null)
useEffect(() => {
window.addEventListener('scroll',handleScroll,true)
return () => {
window.removeEventListener('scroll',true)
}
},[])
const handleScroll = (e) => {
if (e.target.scrollTop === section1.current.offsetTop) {
// Scroll at section 1
}
if (e.target.scrollTop === section2.current.offsetTop) {
// Scroll at section 2
}
if (e.target.scrollTop === section3.current.offsetTop) {
// Scroll at section 3
}
if (e.target.scrollTop === section4.current.offsetTop) {
// Scroll at section 4
}
}
return (
<>
<div className="box one" ref={section1}">
<div className="num">1</div>
</div>
<div className="box two" ref={section2}>
<div className="num">2</div>
</div>
<div className="box three" ref={section3}>
<div className="num">3</div>
</div>
<div className="box four" ref={section4}>
<div className="num">4</div>
</div>
</>
)
}