gpt4 book ai didi

framer-motion - 使用 Framer Motion 重新混合运行页面过渡动画

转载 作者:行者123 更新时间:2023-12-05 02:31:05 26 4
gpt4 key购买 nike

我想在我的网络应用程序中添加一些页面转换。问题是退出动画不起作用。

我有一个运动组件

// app/components/Motion.tsx    
import React from "react";
import { motion } from "framer-motion";
export default function Motion(props: {
children: React.ReactChild | React.ReactFragment | React.ReactPortal;
}) {
return (
<motion.div
className="w-full h-screen bg-blue-400 flex pt-24 mx-auto"
initial={{ opacity: 0, x: -100 }}
animate={{ opacity: 1, x: 0 }}
exit={{ opacity: 0, x: -100 }}
transition={{ duration: 2 }}
>
{props.children}
</motion.div>
);
}

我想像这样包装每一页:

// app/routes/contact.tsx
import Motion from "~/components/Motion";

export default function contact() {
return (
<Motion>
<div>Contact</div>
</Motion>
);
}

我知道我应该使用 <AnimatePresence>来自 framer-motion 但我不知道在哪里。

最佳答案

有趣的是,几个小时前我只是想弄清楚如何做到这一点。我是 Remix 的 super 新手,但这是一个非常简单的示例,说明我为使路线动画正常工作所做的工作。

  1. root.jsx
import {
Links,
LiveReload,
Meta,
Outlet,
Scripts,
ScrollRestoration,
} from 'remix'

import { AnimatePresence } from 'framer-motion'

import styles from './styles/app.css'

export function meta() {
return {
charset: 'utf-8',
title: 'New Remix App',
viewport: 'width=device-width,initial-scale=1',
}
}

export function links() {
return [{ rel: 'stylesheet', href: styles }]
}

export default function App() {
return (
<html lang="en">
<head>
<Meta />
<Links />
</head>
<body>
<AnimatePresence exitBeforeEnter>
<Outlet />
</AnimatePresence>
<ScrollRestoration />
<Scripts />
<LiveReload />
</body>
</html>
)
}
  1. 第一条路线的例子index.jsx
import { motion } from 'framer-motion'

export default function Index() {
return (
<motion.div
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
exit={{ opacity: 0 }}
transition={{ duration: 0.5 }}
className="w-full h-full md:col-span-3 sm:overflow-auto relative z-0"
>

{/* page content */}

</motion.div>
  1. 相同 <motion.div></motion.div>将应用于下一条路线的上述父元素(例如 about.jsx)- 包括相同的初始、动画、退出和过渡属性。

关于framer-motion - 使用 Framer Motion 重新混合运行页面过渡动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71673570/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com