当前位置:首页 > React

react 实现动画

2026-01-26 13:20:05React

使用 CSS Transition 实现简单动画

在 React 中可以通过 CSS Transition 实现元素状态变化的平滑过渡效果。通过 className 或 style 属性的变化触发 CSS 动画。

import { useState } from 'react';

function FadeInOut() {
  const [isVisible, setIsVisible] = useState(false);

  return (
    <div>
      <button onClick={() => setIsVisible(!isVisible)}>
        Toggle
      </button>
      <div 
        className={`box ${isVisible ? 'fade-in' : 'fade-out'}`}
      >
        Content
      </div>
    </div>
  );
}
.box {
  transition: opacity 0.5s ease;
}
.fade-in {
  opacity: 1;
}
.fade-out {
  opacity: 0;
}

使用 React Spring 实现物理动画

React Spring 是基于物理的动画库,适合需要自然运动效果的场景。它支持弹簧动画而非传统的时间曲线。

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}>I will fade in</animated.div>;
}

使用 Framer Motion 实现复杂动画

Framer Motion 提供了声明式的动画 API,支持手势动画、布局动画和复杂的关键帧动画。

react 实现动画

import { motion } from 'framer-motion';

function MotionDemo() {
  return (
    <motion.div
      initial={{ scale: 0 }}
      animate={{ scale: 1 }}
      transition={{ duration: 0.5 }}
      whileHover={{ scale: 1.2 }}
      whileTap={{ scale: 0.8 }}
    >
      Interactive
    </motion.div>
  );
}

使用 React Transition Group 实现组件过渡

React Transition Group 帮助管理组件的挂载和卸载动画,特别适合路由过渡或列表项动画。

import { CSSTransition } from 'react-transition-group';

function TransitionDemo() {
  const [inProp, setInProp] = useState(false);

  return (
    <div>
      <CSSTransition
        in={inProp}
        timeout={300}
        classNames="alert"
        unmountOnExit
      >
        <div>Content</div>
      </CSSTransition>
      <button onClick={() => setInProp(!inProp)}>
        Toggle
      </button>
    </div>
  );
}
.alert-enter {
  opacity: 0;
}
.alert-enter-active {
  opacity: 1;
  transition: opacity 300ms;
}
.alert-exit {
  opacity: 1;
}
.alert-exit-active {
  opacity: 0;
  transition: opacity 300ms;
}

使用 requestAnimationFrame 实现自定义动画

对于需要完全控制的复杂动画,可以直接使用 requestAnimationFrame API。

import { useRef, useEffect } from 'react';

function CustomAnimation() {
  const ref = useRef(null);

  useEffect(() => {
    let start;
    const element = ref.current;

    function step(timestamp) {
      if (!start) start = timestamp;
      const progress = timestamp - start;
      element.style.transform = `translateX(${Math.min(progress/10, 200)}px)`;
      if (progress < 2000) {
        window.requestAnimationFrame(step);
      }
    }

    window.requestAnimationFrame(step);
  }, []);

  return <div ref={ref}>Moving</div>;
}

每种方法适用于不同场景:CSS Transition 适合简单状态变化,React Spring 适合物理动画,Framer Motion 适合复杂交互动画,React Transition Group 适合组件过渡,requestAnimationFrame 提供最低层的控制。

标签: 动画react
分享给朋友:

相关文章

react native 如何

react native 如何

安装 React Native 开发环境 确保系统已安装 Node.js(建议版本 16 或更高)。通过以下命令安装 React Native CLI 工具: npm install -g rea…

如何降低react版本

如何降低react版本

降低 React 项目版本的步骤 检查当前 React 版本 在项目根目录的 package.json 文件中查看 dependencies 或 devDependencies 下的 react 和…

vue实现动画

vue实现动画

Vue 实现动画的方法 Vue 提供了多种方式来实现动画效果,包括内置的过渡系统、第三方动画库以及直接操作 CSS 或 JavaScript 动画。 使用 Vue 内置过渡系统 Vue 的 <…

利用css3制作动画

利用css3制作动画

CSS3 动画基础 CSS3 通过 @keyframes 规则和 animation 属性实现动画效果。@keyframes 定义动画的关键帧,animation 控制动画的播放方式(如持续时间、延迟…

如何生成react代码

如何生成react代码

使用 Create React App 生成项目 安装 Node.js 后,通过命令行工具运行以下命令创建新项目: npx create-react-app my-app cd my-app np…

电脑如何安装react

电脑如何安装react

安装 Node.js 和 npm React 依赖于 Node.js 和 npm(Node Package Manager)。从 Node.js 官网下载并安装最新稳定版本,安装完成后会自动包含 np…