当前位置:首页 > React

react如何设置动画

2026-02-12 06:43:48React

使用 CSS Transition 实现简单动画

在 React 中,可以通过 CSS transition 属性实现简单的动画效果。定义一个 CSS 类,并通过 classNamestyle 动态切换触发动画。

/* CSS 文件 */
.fade-in {
  opacity: 1;
  transition: opacity 0.5s ease-in;
}

.fade-out {
  opacity: 0;
  transition: opacity 0.5s ease-out;
}

在 React 组件中,通过 useState 控制类名的切换:

import React, { useState } from 'react';
import './styles.css';

function FadeComponent() {
  const [isVisible, setIsVisible] = useState(true);

  return (
    <div>
      <div className={isVisible ? 'fade-in' : 'fade-out'}>
        这是一个淡入淡出动画
      </div>
      <button onClick={() => setIsVisible(!isVisible)}>
        切换可见性
      </button>
    </div>
  );
}

使用 React Transition Group 管理动画生命周期

react-transition-group 是一个官方推荐的动画库,提供组件进入和离开时的动画控制。

安装:

npm install react-transition-group

使用 CSSTransition 组件:

import React, { useState } from 'react';
import { CSSTransition } from 'react-transition-group';
import './styles.css';

function App() {
  const [show, setShow] = useState(false);

  return (
    <div>
      <button onClick={() => setShow(!show)}>
        切换动画
      </button>
      <CSSTransition
        in={show}
        timeout={300}
        classNames="fade"
        unmountOnExit
      >
        <div className="fade-element">
          这是一个渐变动画
        </div>
      </CSSTransition>
    </div>
  );
}

CSS 配合 CSSTransition

react如何设置动画

.fade-element {
  opacity: 0;
  transition: opacity 300ms ease-in;
}

.fade-enter {
  opacity: 0;
}

.fade-enter-active {
  opacity: 1;
}

.fade-exit {
  opacity: 1;
}

.fade-exit-active {
  opacity: 0;
}

使用 Framer Motion 实现复杂动画

framer-motion 是一个功能强大的动画库,支持手势、物理动画等高级效果。

安装:

npm install framer-motion

基础动画示例:

react如何设置动画

import React from 'react';
import { motion } from 'framer-motion';

function Box() {
  return (
    <motion.div
      initial={{ opacity: 0, scale: 0.5 }}
      animate={{ opacity: 1, scale: 1 }}
      transition={{ duration: 0.5 }}
      whileHover={{ scale: 1.2 }}
      whileTap={{ scale: 0.9 }}
    >
      这是一个 Framer Motion 动画
    </motion.div>
  );
}

使用 React Spring 实现物理动画

react-spring 基于物理模型实现动画,适合流畅的交互效果。

安装:

npm install react-spring

基础示例:

import React from 'react';
import { useSpring, animated } from 'react-spring';

function SpringDemo() {
  const props = useSpring({
    opacity: 1,
    from: { opacity: 0 },
    config: { duration: 1000 },
  });

  return (
    <animated.div style={props}>
      这是一个 React Spring 动画
    </animated.div>
  );
}

结合 SVG 动画

在 React 中,可以通过 react-springframer-motion 实现 SVG 动画。

import React from 'react';
import { motion } from 'framer-motion';

function SvgAnimation() {
  return (
    <svg width="100" height="100">
      <motion.circle
        cx="50"
        cy="50"
        r="40"
        fill="blue"
        animate={{ cx: [50, 100, 50] }}
        transition={{ duration: 2, repeat: Infinity }}
      />
    </svg>
  );
}

总结

  • CSS Transition:适用于简单动画,通过类名切换控制。
  • React Transition Group:管理组件进入/退出动画。
  • Framer Motion:适用于复杂交互和手势动画。
  • React Spring:基于物理模型,适合流畅的动态效果。
  • SVG 动画:结合 framer-motionreact-spring 实现动态图形效果。

根据需求选择合适的工具,复杂的动画推荐使用 framer-motionreact-spring,简单的过渡效果可直接用 CSS 或 react-transition-group

分享给朋友:

相关文章

css3制作简单动画

css3制作简单动画

CSS3 制作简单动画的方法 CSS3 提供了多种方式制作动画,主要通过 transition、transform 和 animation 属性实现。以下是几种常见的实现方法。 使用 transi…

vue动画实现原理

vue动画实现原理

Vue动画实现原理 Vue的动画系统基于CSS过渡和动画,结合Vue的响应式系统,提供声明式的方式管理元素进入/离开的动画效果。核心原理分为以下几个部分: 过渡类名自动应用 Vue在元素插入/删除…

vue实现共享动画

vue实现共享动画

Vue 实现共享动画的方法 在 Vue 中实现共享动画(即多个元素间平滑过渡的动画效果)可以通过 Vue 的过渡系统和第三方库(如 GSAP)来实现。以下是几种常见方法: 使用 Vue 的 <…

css3动画制作工具

css3动画制作工具

CSS3 动画制作工具推荐 以下是几款流行的工具和资源,可帮助快速创建CSS3动画,涵盖可视化工具、代码生成器和学习平台。 可视化工具 1. Animate.css 提供预定义的CSS…

vue实现翻页动画

vue实现翻页动画

实现翻页动画的基本思路 在Vue中实现翻页动画通常需要结合CSS过渡或动画效果。可以通过Vue的过渡组件<transition>或<transition-group>来实现页面…

vue实现过度动画

vue实现过度动画

Vue过渡动画的实现方式 Vue提供了<transition>和<transition-group>组件来实现元素进入/离开的过渡动画效果,主要通过CSS或JavaScript…