使用framer motion时,我试图在一个对象进入视口时淡入它,然后我希望它保持固定一段时间,最后淡出。
到目前为止,我只设法淡入和淡出元素时,它离开视口,这是为时已晚,我无法找出如何固定元素在某一滚动位置。
- 以下是我取得的成就:**
- 这是我努力实现的目标:**
下面是代码:
export default function App() {
const [ref, inView] = useInView({
threshold: 0.5,
triggerOnce: false
});
const variants = {
visible: { opacity: 1, scale: 1, y: 0 },
hidden: {
opacity: 0,
scale: 0.65,
y: 50
}
};
return (
<div className="App">
<div style={{ height: 500 }} />
<motion.div
animate={inView ? "visible" : "hidden"}
variants={variants}
exit="hidden"
transition={{ duration: 2, ease: "easeOut" }}
className="box"
ref={ref}
/>
</div>
);
}
我将非常感谢任何形式的帮助!
1条答案
按热度按时间hgb9j2n61#
您几乎就可以做到这一点了,只是做了一些调整-主要是CSS,用于确定动画元素的位置。
以下是完整的演示:https://codesandbox.io/s/flamboyant-sara-ce4pvx?file=/src/App.js
注意:把
useInView
钩子和scale
动画结合起来会有一些问题,因为缩放元素会影响视图阈值。你也可以考虑use-scroll
作为替代,它可能更难实现,但提供了更多的动画控制。