当前位置:首页 > 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中monent如何获取日期

react中monent如何获取日期

使用 Moment.js 获取当前日期 在 React 中通过 Moment.js 获取当前日期,可以直接调用 moment() 函数。它会返回包含当前日期和时间的 Moment 对象。 impor…

react 如何执行

react 如何执行

安装 Node.js 和 npm React 开发需要 Node.js 环境,因为它提供了 npm(或 yarn)包管理工具。从 Node.js 官网 下载并安装最新 LTS 版本。安装完成后,在终端…

jquery动画

jquery动画

jQuery动画基础 jQuery提供了多种动画方法,用于创建平滑的过渡效果。常用的动画方法包括animate()、fadeIn()、fadeOut()、slideUp()和slideDown()。…

react如何滚动scroll

react如何滚动scroll

React 实现滚动的方法 使用 useRef 和 scrollTo 方法 通过 useRef 获取 DOM 元素的引用,调用 scrollTo 方法实现滚动。 import React, { us…

react如何减少伤害

react如何减少伤害

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

vue实现ios动画

vue实现ios动画

Vue 实现 iOS 动画的方法 使用 CSS Transition 和 Vue 的过渡系统 Vue 提供了内置的过渡系统,可以通过 <transition> 组件实现动画效果。结合 CS…