对滚动位置的反应触发效果
React trigger effect on scroll position
进入视口后我必须在某些组件上实现一些自定义动画,在桌面模式下它应该被触发
window.scrollY > 1200
它适用于桌面但不适用于移动模式,问题是在移动模式下我的 window.scrollY 从来没有达到 1200。
我应该如何管理这样的滚动效果的响应能力?
export default function Layout() {
const [navColor, setNavColor] = useState(null);
const [x, setX] = useState(null);
const pop = () => {
console.log(window.scrollY);
if(window.scrollY > 1200){
setX(classes.Swipe);
}
if(window.scrollY > 927) {
setNavColor('red');
}
else{
setNavColor(null);
}
}
window.addEventListener('scroll', () => pop());
return (
<div className={classes.Layout}>
<Video/>
<Navbar color={navColor}/>
<Picture />
<AboutMe />
<div className={classes.c}>tessdfsdfsfdst div</div>
<div className={[ x,classes.Div].join(' ')}>
</div>
</div>
);
}
首先在组件安装时添加您的事件,并在卸载时删除它(为了安全和性能):
useEffect(() => {
window.addEventListener('scroll', pop);
return () => window.removeEventListener('scroll', pop);
},[]);
那么你的函数可以是:
const pop = () => {
if (window.scrollY > 1200) {
setX(classes.Swipe);
}
if (window.scrollY > 927) {
setNavColor('red');
}
setNavColor(null);
}
然后检测是否是手机,可以这样:
function isMobile() {
return window.innerWidth <= 800;
}
进入视口后我必须在某些组件上实现一些自定义动画,在桌面模式下它应该被触发
window.scrollY > 1200
它适用于桌面但不适用于移动模式,问题是在移动模式下我的 window.scrollY 从来没有达到 1200。
我应该如何管理这样的滚动效果的响应能力?
export default function Layout() {
const [navColor, setNavColor] = useState(null);
const [x, setX] = useState(null);
const pop = () => {
console.log(window.scrollY);
if(window.scrollY > 1200){
setX(classes.Swipe);
}
if(window.scrollY > 927) {
setNavColor('red');
}
else{
setNavColor(null);
}
}
window.addEventListener('scroll', () => pop());
return (
<div className={classes.Layout}>
<Video/>
<Navbar color={navColor}/>
<Picture />
<AboutMe />
<div className={classes.c}>tessdfsdfsfdst div</div>
<div className={[ x,classes.Div].join(' ')}>
</div>
</div>
);
}
首先在组件安装时添加您的事件,并在卸载时删除它(为了安全和性能):
useEffect(() => {
window.addEventListener('scroll', pop);
return () => window.removeEventListener('scroll', pop);
},[]);
那么你的函数可以是:
const pop = () => {
if (window.scrollY > 1200) {
setX(classes.Swipe);
}
if (window.scrollY > 927) {
setNavColor('red');
}
setNavColor(null);
}
然后检测是否是手机,可以这样:
function isMobile() {
return window.innerWidth <= 800;
}