reactjs 框架运动-根据滚动位置淡出元素

u59ebvdq  于 2023-02-18  发布在  React
关注(0)|答案(1)|浏览(126)

使用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>
  );
}

我将非常感谢任何形式的帮助!

hgb9j2n6

hgb9j2n61#

您几乎就可以做到这一点了,只是做了一些调整-主要是CSS,用于确定动画元素的位置。

body {
  margin: 0;
}

.App {
  height: 300vh;
  display: flex;
  justify-content: center;
  align-items: center;
  background-color: #3b6fe0;
}

.box {
  width: 200px;
  height: 200px;
  background-color: #fff;
  border-radius: 20px;
}

以下是完整的演示:https://codesandbox.io/s/flamboyant-sara-ce4pvx?file=/src/App.js
注意:把useInView钩子和scale动画结合起来会有一些问题,因为缩放元素会影响视图阈值。你也可以考虑use-scroll作为替代,它可能更难实现,但提供了更多的动画控制。

相关问题