【发布时间】:2020-01-04 23:22:49
【问题描述】:
我试图在用户滚动时在 React 中为组件提供淡入效果,但我希望淡入效果仅在元素第一次移入视口时发生。
目前,我使用的代码在每次元素移入视口时都会导致淡入,因此它们会不断淡入和淡出。
这是我的淡入组件:
import React, {useState, useRef, useEffect} from 'react';
import './styles/FadeInSection.css';
export default function FadeInSection(props) {
const [isVisible, setVisible] = useState(true);
const domRef = React.useRef();
useEffect(() => {
const observer = new IntersectionObserver(entries => {
entries.forEach(entry => setVisible(entry.isIntersecting));
});
observer.observe(domRef.current);
return () => observer.unobserve(domRef.current);
}, []);
return (
<div ref={ domRef } className={ `fade-in-section ${ isVisible ? 'is-visible' : '' }` }>
{ props.children }
</div>
)
}
这些是我正在使用的样式:
.fade-in-section {
opacity: 0;
transform: translateY(20vh);
isibility: hidden;
transition: opacity 0.2s ease-out, transform 0.6s ease-out;
will-change: opacity, visibility;
}
.fade-in-section.is-visible {
opacity: 1;
transform: none;
visibility: visible;
display: flex;
}
这是我的网站,它不断地淡入淡出组件,提供了糟糕的体验:
这是想要的效果:
怎样才能达到想要的效果?
这里是代码沙箱的链接来测试它:Code sandbox link
【问题讨论】:
标签: javascript reactjs scroll fadein intersection-observer