五种为React应用添加动画的方法

660 阅读4分钟

在ReactJs应用程序中实现动画是一个热门的话题,有许多不同的方法可以创建不同类型的动画。许多开发人员使用CSS并将类添加到HTML标签中来创建动画,这是一种很好的方式,您应该使用它。如果您想创建复杂的动画,可以考虑使用GreenSock。GreenSock是最强大的动画平台之一。此外,还有许多用于在React中创建动画的库和组件。

让我们来谈谈它们吧 😎

Css方式:

  • React-transition-group - 这是一个添加组件,用于实现基本CSS动画和过渡的附加组件。
  • react-animations - React-animations 实现了 animate.css 的所有动画。使用简单!
  • React Reveal - 这是一个适用于 React 的动画框架。
  • TweenOne - 这是一个用于动画的库,ant.design 使用它。

当然,开源社区拥有更多的动画库和组件,我可以帮你探索它们。但是,本文不会包含这些库。文章结尾还会有一个奖励,推荐一些值得关注的库。

一、CSS方式 这种方法非常适合创建简单的动画。相比导入JavaScript库,使用这种方法可以保持较小的捆绑包大小,减少浏览器资源的消耗。这两点也在很大程度上影响应用程序的性能。如果您担心捆绑包大小,同时需要创建简单的动画,请注意这种方法。

我想向您展示如何使用CSS进行动画效果。让我们看看汉堡菜单的示例:👇

1_cosKxTRdOfM3YrNc_2Ah3g.gif

这个菜单使用CSS属性和触发className="is-nav-open"的HTML标记非常容易使用。实现此示例的方法有很多种。其中一种方法是在导航上方创建一个包装器,并在margin上触发更改。导航的宽度固定为250px。包装器使用相同宽度的margin-left或translateX属性。当我们需要显示导航时,我们需要为包装器添加className="is-nav-open",并将包装器移动到margin-left/translateX: 0的位置。

1_08y12Sp1d9cLSKE9nz1EaA.webp

Css styles: 1_nZ6Mq1wmqu8JSF-DfebeVw.webp

相信我,在大多数情况下使用这种方法是必要的。我们最好编写几行CSS代码并触发className,而不是导入大型库并将其实现在我们的项目中。用户会感激你,因为你的应用程序可以更快地在浏览器上播放。

有时候,你必须使用其他方法。还有其他什么方法吗?让我们看一下下一个方法。

二、ReactTransitionGroup

这个附加组件是由ReactJs社区的开发者开发的。ReactTransitionGroup非常容易实现基本的CSS动画和过渡效果。

开发者将这个库描述为:

这是一个用于管理组件状态(包括挂载和卸载)的一组组件,特别为动画设计而开发的。

无论如何,你需要知道以下三点关于这个附加组件:

  • React Transition Group在组件生命周期改变时改变类。因此,动画样式应该在CSS类中描述。
  • ReactTransitionGroup的大小很小。它应该被安装在React应用程序包中,不会显著增加你的捆绑包。但你也可以使用CDN。
  • ReactTransitionGroup有三个组件(Transition、CSSTransition和TransitionGroup)。为了获得动画效果,你需要在它们中包装组件。 让我们看一下如何制作类似的动画👀👇

1_AwFrD7KVn0gibJX5iVT5BA.gif

首先,你需要从react-transition-group中导入CSSTransitionGroup。之后,你需要将列表包装在其中,并设置transitionName属性。每当在CSSTransitionGroup中的子元素被添加或删除时,它都会获得动画样式。

1_ltbYH9Yv8WPH5Jzs3koYKQ.webp

如果你设置transitionName="example"属性,样式表中的类应该以example名称开头。

你可以看到基本用法ReactTransitionGroup版本。👀

这就是你需要的一切。当然,你需要添加一些逻辑。我们应该描述两种实现我们的示例联系人列表的方法:

handleAdd — 添加新联系人,它获取一个随机名称并将其推送到数组状态.items中。(它使用random-name包来获取随机名称)

handleRemove — 通过state.items数组中的索引删除联系人。

1_qM3rFr4M1awe5m4G92CPbg.webp