当前位置:首页 > 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
分享给朋友:

相关文章

css3动画在线制作

css3动画在线制作

CSS3 动画在线制作工具 以下是一些常用的在线工具和平台,可以帮助快速生成 CSS3 动画代码,无需手动编写: Animista 网址:https://animista.net/ 特点:提供预设的…

vue的动画实现

vue的动画实现

Vue 动画实现方式 Vue 提供了多种方式实现动画效果,主要包括内置组件和第三方库。 使用 <transition> 和 <transition-group> Vue 内…

vue哪个组件实现动画

vue哪个组件实现动画

在Vue中实现动画效果,可以通过以下组件和方法实现: Vue内置动画组件 Vue提供了<transition>和<transition-group>两个内置组件,用于处理进入…

react native 如何

react native 如何

React Native 开发基础 React Native 是一个用于构建跨平台移动应用的框架,允许开发者使用 JavaScript 和 React 编写代码,同时生成原生 iOS 和 Androi…

react native如何启动

react native如何启动

如何启动 React Native 项目 安装 Node.js 和 npm 确保已安装 Node.js(建议版本 16 或更高)和 npm(Node.js 自带)。可通过以下命令检查版本: node…

react中monent如何获取日期

react中monent如何获取日期

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