当前位置:首页 > 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

示例代码:

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
分享给朋友:

相关文章

vue 动画实现

vue 动画实现

Vue 动画实现方式 Vue 提供了多种方式实现动画效果,主要分为内置组件和第三方库集成。 使用 Vue 内置过渡组件 Vue 的 <transition> 和 <transit…

css3制作简单动画

css3制作简单动画

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

如何评价react native

如何评价react native

React Native 的优势 跨平台开发效率高:基于 JavaScript 和 React 语法,可同时开发 iOS 和 Android 应用,减少重复代码量。性能接近原生:通过原生组件渲染,性能…

电脑如何安装react

电脑如何安装react

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

react如何开发组件

react如何开发组件

React 组件开发基础 React 组件分为函数组件和类组件两种形式。函数组件是现代 React 开发的主流方式,结合 Hooks 可以实现完整功能。 函数组件示例: function Gr…

如何手写一个react

如何手写一个react

手写一个简单的 React 创建一个基础的 React 实现需要理解其核心概念:虚拟 DOM、组件、状态管理和渲染。以下是一个简化版的 React 实现。 创建虚拟 DOM 虚拟 DOM 是真实…