Skip to content

搞英语 → 看世界

翻译英文优质信息和名人推特

Menu
  • 首页
  • 作者列表
  • 独立博客
  • 专业媒体
  • 名人推特
  • 邮件列表
  • 关于本站
Menu

在 Remix 中添加路线过渡动画

Posted on 2022-05-30

1098981.png

当我使用 Remix 重建我的网站时,我没有费心花时间制作任何动画。
重建已经上线几周后,我想添加一些更有趣的东西,所以首先想到的是动画。

使用useTransition()钩子,在进行数据突变时,Remix 可以很容易地为你的路由添加转换。但我想要的只是在通过单击链接请求的路线中制作动画,并为当前活动的路线制作动画。
我发现最简单的方法是使用Framer Motion 。通过使用<AnimatePresence />组件包装我的所有内容,我们现在可以添加我们希望在路线转换中具有的实际动画。
这是我的 App 函数在root.tsx (Remix 应用程序的主要入口点)中的样子:

 import { AnimatePresence , motion } from ' framer-motion ' import { useOutlet , useLocation } from ' remix ' export default function App () { const outlet = useOutlet () const data = useLoaderData < LoaderData > () return ( < ThemeProvider specifiedTheme = { data . theme } > < Document > < Scripts /> < Layout > < AnimatePresence exitBeforeEnter initial = { false } > < motion . main key = { useLocation (). pathname } initial = { { x : ' -10% ' , opacity : 0 } } animate = { { x : ' 0 ' , opacity : 1 } } exit = { { y : ' -10% ' , opacity : 0 } } transition = { { duration : 0.3 } } > { outlet } </ motion . main > </ AnimatePresence > </ Layout > </ Document > </ ThemeProvider > ) }

如您所见,我在<AnimatePresence>上添加了exitBeforeEnter道具,因为我希望它一次只渲染一个组件。退出组件将在渲染进入组件之前完成其退出动画。因为我还希望初始加载不触发动画,所以我使用了initial={false}属性。这将导致在 AnimatePresence 首次加载时出现的组件以动画状态启动。只有在此初始渲染之后进入的组件才会进行动画处理。

通过将我的<Layout>保留在<AnimatePresence>之外,我的页眉和页脚将不会被动画化,只有页面内的内容,正是我想要的!

在<motion.main>上,您必须为 Framer 传递一个密钥才能识别唯一路线,我选择传递 Remix 的内置useLocation()钩子提供的路径名,效果很好。
剩下的就是传递exit 、 initial 、 animate和transition道具,它们本身就说明了问题,并且在docs中有详细记录。

这是一个非常基本的动画,但我确实喜欢这个结果,它使网站更有活力:-)。
查看thomasledoux.be上的实时站点。代码可以在Github上找到。

原文: https://dev.to/thomasledoux1/adding-route-transition-animations-in-remix-52jm

本站文章系自动翻译,站长会周期检查,如果有不当内容,请点此留言,非常感谢。
  • Abhinav
  • Abigail Pain
  • Adam Fortuna
  • Alberto Gallego
  • Alex Wlchan
  • Answer.AI
  • Arne Bahlo
  • Ben Carlson
  • Ben Kuhn
  • Bert Hubert
  • Bits about Money
  • Brian Krebs
  • ByteByteGo
  • Chip Huyen
  • Chips and Cheese
  • Christopher Butler
  • Cool Infographics
  • Dan Sinker
  • David Walsh
  • Dmitry Dolzhenko
  • Elad Gil
  • Ellie Huxtable
  • Ethan Marcotte
  • Exponential View
  • FAIL Blog
  • Founder Weekly
  • Geoffrey Huntley
  • Geoffrey Litt
  • Greg Mankiw
  • Henrique Dias
  • Hypercritical
  • IEEE Spectrum
  • Investment Talk
  • Jaz
  • Jeff Geerling
  • Jonas Hietala
  • Josh Comeau
  • Lenny Rachitsky
  • Lou Plummer
  • Luke Wroblewski
  • Matt Stoller
  • Mert Bulan
  • Mostly metrics
  • News Letter
  • NextDraft
  • Non_Interactive
  • Not Boring
  • One Useful Thing
  • Phil Eaton
  • Product Market Fit
  • Readwise
  • ReedyBear
  • Robert Heaton
  • Ruben Schade
  • Sage Economics
  • Sam Altman
  • Sam Rose
  • selfh.st
  • Shtetl-Optimized
  • Simon schreibt
  • Slashdot
  • Small Good Things
  • Taylor Troesh
  • Telegram Blog
  • The Macro Compass
  • The Pomp Letter
  • thesephist
  • Thinking Deep & Wide
  • Tim Kellogg
  • 英文媒体
  • 英文推特
  • 英文独立博客
©2025 搞英语 → 看世界 | Design: Newspaperly WordPress Theme