当前位置:首页 > React

react实现出场动画

2026-01-27 12:06:55React

使用 CSS Transition 实现基础出场动画

在 React 中通过 CSS 的 transition 属性配合状态变化实现平滑过渡效果。定义一个 CSS 类包含过渡属性和初始样式,通过 React 的状态控制类名的切换。

.fade-enter {
  opacity: 0;
}
.fade-enter-active {
  opacity: 1;
  transition: opacity 500ms ease-in;
}
.fade-exit {
  opacity: 1;
}
.fade-exit-active {
  opacity: 0;
  transition: opacity 500ms ease-out;
}

在组件中使用 useState 控制显示状态,通过条件渲染触发动画:

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

function FadeComponent() {
  const [show, setShow] = useState(true);

  return (
    <div>
      <button onClick={() => setShow(!show)}>
        Toggle
      </button>
      {show && (
        <div className="fade-enter-active">
          Content to animate
        </div>
      )}
    </div>
  );
}

使用 React Transition Group 库处理复杂动画

对于需要精细控制的动画序列,推荐使用 react-transition-group 库。该库提供 CSSTransition 组件自动管理类名生命周期,支持入场和出场动画的协调。

安装依赖:

react实现出场动画

npm install react-transition-group

实现示例:

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

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

  return (
    <div>
      <button onClick={() => setInProp(!inProp)}>
        Toggle
      </button>
      <CSSTransition
        in={inProp}
        timeout={300}
        classNames="fade"
        unmountOnExit
      >
        <div>Animated content</div>
      </CSSTransition>
    </div>
  );
}

对应的 CSS 需匹配 classNames 前缀:

.fade-enter {
  opacity: 0;
}
.fade-enter-active {
  opacity: 1;
  transition: opacity 300ms;
}
.fade-exit {
  opacity: 1;
}
.fade-exit-active {
  opacity: 0;
  transition: opacity 300ms;
}

使用 Framer Motion 实现高级动画

对于需要物理引擎或复杂路径的动画,framer-motion 提供声明式 API 和手势支持。定义 motion 组件并通过 animate 属性控制动画状态。

react实现出场动画

安装依赖:

npm install framer-motion

实现滑入滑出动画:

import { motion, AnimatePresence } from "framer-motion";

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

  return (
    <div>
      <button onClick={() => setIsVisible(!isVisible)}>
        Toggle
      </button>
      <AnimatePresence>
        {isVisible && (
          <motion.div
            initial={{ x: -100, opacity: 0 }}
            animate={{ x: 0, opacity: 1 }}
            exit={{ x: 100, opacity: 0 }}
            transition={{ type: "spring", stiffness: 100 }}
          >
            Slide content
          </motion.div>
        )}
      </AnimatePresence>
    </div>
  );
}

性能优化注意事项

使用 will-change CSS 属性提示浏览器优化层创建:

.animated-element {
  will-change: transform, opacity;
}

对于列表动画,为每个元素分配唯一 key 属性帮助 React 正确识别节点。避免在动画期间触发组件重渲染,可通过 React.memouseMemo 优化。

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

相关文章

如何优化react

如何优化react

优化 React 性能的方法 使用 React.memo 或 PureComponent 对于函数组件,使用 React.memo 进行记忆化,避免不必要的重新渲染。类组件可以使用 PureCompo…

react如何清理

react如何清理

清理 React 项目的方法 清理未使用的依赖项 运行 npm prune 或 yarn install --production 可以移除 node_modules 中未在 package.json…

react就业如何

react就业如何

React 就业市场现状 React 作为当前主流前端框架之一,就业需求持续旺盛。国内外互联网企业、中大型公司以及初创团队普遍采用 React 技术栈,尤其在 Web 应用、移动端(React Nat…

react如何引入echarts

react如何引入echarts

安装 ECharts 依赖 在 React 项目中安装 ECharts 核心库和 React 封装库: npm install echarts echarts-for-react 基础引入方式 创建…

react如何减少伤害

react如何减少伤害

减少 React 应用性能伤害的方法 使用 React.memo 或 PureComponent 对于函数组件,使用 React.memo 进行浅比较,避免不必要的重新渲染。类组件可以使用 PureC…

react如何修改值

react如何修改值

修改 React 组件的值 在 React 中修改值通常涉及状态管理。根据组件的类型(类组件或函数组件)和状态管理方式(本地状态或全局状态),方法有所不同。 使用 useState(函数组件) 在函…