当前位置:首页 > React

react实现动画

2026-01-26 12:24:56React

使用 CSS 过渡实现动画

通过 transition 属性结合 React 的状态管理实现简单动画。定义一个 CSS 类,包含过渡效果,通过 className 动态切换触发动画。

.box {
  width: 100px;
  height: 100px;
  background: blue;
  transition: transform 0.3s ease;
}
.box:hover {
  transform: scale(1.2);
}

在 React 组件中通过状态控制类名:

function AnimatedBox() {
  const [isHovered, setIsHovered] = useState(false);
  return (
    <div 
      className={`box ${isHovered ? 'hovered' : ''}`}
      onMouseEnter={() => setIsHovered(true)}
      onMouseLeave={() => setIsHovered(false)}
    />
  );
}

使用 CSS 动画(@keyframes)

通过 @keyframes 定义动画序列,结合 animation 属性实现复杂动画效果。

@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}
.fade-in {
  animation: fadeIn 1s forwards;
}

在 React 中通过条件渲染或状态触发动画:

function FadeInComponent({ show }) {
  return <div className={show ? 'fade-in' : ''}>内容</div>;
}

使用 React Transition Group

第三方库 react-transition-group 提供组件化管理进入/退出动画的能力。安装后通过 CSSTransition 组件控制动画生命周期。

npm install react-transition-group

示例代码:

import { CSSTransition } from 'react-transition-group';
function ToggleAnimation() {
  const [show, setShow] = useState(false);
  return (
    <>
      <button onClick={() => setShow(!show)}>切换</button>
      <CSSTransition
        in={show}
        timeout={300}
        classNames="fade"
        unmountOnExit
      >
        <div>动画内容</div>
      </CSSTransition>
    </>
  );
}

需配套 CSS 定义 .fade-enter.fade-enter-active 等类名。

使用 Framer Motion

Framer Motion 是专为 React 设计的高性能动画库,支持手势、布局动画等高级功能。

安装:

npm install framer-motion

示例代码:

import { motion } from 'framer-motion';
function DragAnimation() {
  return (
    <motion.div
      drag
      dragConstraints={{ left: 0, right: 100 }}
      whileHover={{ scale: 1.1 }}
      whileTap={{ scale: 0.9 }}
    />
  );
}

使用 useSpring(React Spring)

React Spring 提供基于物理模型的动画钩子,适合复杂交互动画。

安装:

npm install react-spring

示例代码:

react实现动画

import { useSpring, animated } from 'react-spring';
function SpringAnimation() {
  const props = useSpring({ opacity: 1, from: { opacity: 0 } });
  return <animated.div style={props}>淡入内容</animated.div>;
}

性能优化建议

  • 优先使用 CSS 动画而非 JavaScript 动画,以减少主线程负载。
  • 对位移、缩放等属性使用 transformopacity,以触发 GPU 加速。
  • 避免频繁触发重排(如修改 widthheight),使用 will-change 预提示浏览器。

以上方法可根据场景组合使用,CSS 方案适合简单动画,库方案(如 Framer Motion)适合复杂交互需求。

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

相关文章

react 如何引入css

react 如何引入css

在 React 中引入 CSS 的方法 React 提供了多种引入 CSS 的方式,可以根据项目需求选择合适的方法。以下是常见的几种方式: 内联样式 内联样式直接在组件中通过 style 属性定义,…

电脑如何安装react

电脑如何安装react

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

react如何运行

react如何运行

运行React项目的步骤 安装Node.js 确保系统已安装Node.js(建议版本12以上),可从官网下载并安装。Node.js自带npm包管理器,用于后续依赖安装。 创建React项目 使用官方…

react如何迭代

react如何迭代

在 React 中迭代数组或对象 React 提供了多种方式来处理数组或对象的迭代,以下是常见的方法: 使用 map 方法迭代数组 map 是 JavaScript 数组的内置方法,常用于在 Rea…

react如何注销

react如何注销

React 组件的注销方法 在 React 中,组件的注销通常指的是在组件卸载时执行清理操作,例如取消订阅、清除定时器或释放资源。以下是几种常见的方法: 使用 useEffect 钩子的清理函数…

react 如何循环

react 如何循环

循环渲染列表 在React中,循环渲染列表通常使用map方法。map可以遍历数组并返回一个新的React元素数组。 const items = ['Apple', 'Banana', 'Orange…