当前位置:首页 > React

react如何处理动画

2026-03-31 16:48:18React

使用 CSS 过渡和动画

React 可以直接利用 CSS 的过渡(transition)和关键帧动画(@keyframes)实现动画效果。通过动态添加或移除 CSS 类名,结合 classNamestyle 属性控制动画状态。

import { useState } from 'react';

function FadeInComponent() {
  const [isVisible, setIsVisible] = useState(false);

  return (
    <div>
      <button onClick={() => setIsVisible(!isVisible)}>Toggle</button>
      <div className={`box ${isVisible ? 'fade-in' : ''}`}>Content</div>
    </div>
  );
}
.box {
  opacity: 0;
  transition: opacity 0.5s ease;
}

.box.fade-in {
  opacity: 1;
}

使用 React Transition Group

react-transition-group 是一个官方推荐的库,用于管理组件的进入和离开动画。它提供 CSSTransitionTransition 等组件,与 CSS 动画无缝集成。

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

function Example() {
  const [show, setShow] = useState(false);

  return (
    <div>
      <button onClick={() => setShow(!show)}>Toggle</button>
      <CSSTransition
        in={show}
        timeout={300}
        classNames="fade"
        unmountOnExit
      >
        <div>Animated Content</div>
      </CSSTransition>
    </div>
  );
}
.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 和复杂的动画效果(如弹簧物理、手势交互)。适合需要高性能或复杂动画的场景。

import { motion } from 'framer-motion';

function DragExample() {
  return (
    <motion.div
      drag
      dragConstraints={{ left: 0, right: 100 }}
      whileHover={{ scale: 1.1 }}
      whileTap={{ scale: 0.9 }}
    >
      Drag Me
    </motion.div>
  );
}

使用 React Spring

react-spring 是一个基于物理的动画库,通过弹簧动力学实现更自然的动画效果。支持数值插值、序列动画和响应式交互。

import { useSpring, animated } from 'react-spring';

function SpringDemo() {
  const props = useSpring({
    opacity: 1,
    from: { opacity: 0 },
    config: { duration: 1000 },
  });

  return <animated.div style={props}>Fade In</animated.div>;
}

使用 GreenSock (GSAP)

GSAP 是一个专业的动画库,适合需要精细控制时间轴或复杂序列动画的场景。通过 useRefuseEffect 集成到 React 中。

react如何处理动画

import { useRef, useEffect } from 'react';
import gsap from 'gsap';

function GsapDemo() {
  const boxRef = useRef();

  useEffect(() => {
    gsap.to(boxRef.current, {
      x: 100,
      duration: 1,
      repeat: -1,
      yoyo: true,
    });
  }, []);

  return <div ref={boxRef}>Moving Box</div>;
}

性能优化建议

  • 优先使用 CSS 硬件加速属性(如 transformopacity)。
  • 避免频繁触发重排(如修改 widthheight)。
  • 对大量元素的动画使用 will-changeReact.memo 减少渲染。
  • 在组件卸载时清理动画资源(如 GSAP 的 kill())。

分享给朋友:

相关文章

jquery 动画

jquery 动画

jQuery 动画基础 jQuery 提供了一系列动画方法,用于实现元素的动态效果,如淡入淡出、滑动、自定义动画等。 常用动画方法 fadeIn() / fadeOut(): 元素的淡入和…

vue点击实现动画

vue点击实现动画

Vue 中实现点击动画的方法 使用 CSS 过渡和 Vue 的 v-on 指令 在 Vue 模板中绑定 @click 事件,通过修改数据属性触发 CSS 过渡效果。示例代码: <templat…

css3动画制作工具

css3动画制作工具

CSS3 动画制作工具推荐 以下是几款流行的工具和资源,可帮助快速创建CSS3动画,涵盖可视化工具、代码生成器和学习平台。 可视化工具 1. Animate.css 提供预定义的CSS动画…

vue 实现文字动画

vue 实现文字动画

Vue 实现文字动画的方法 使用 CSS 动画结合 Vue 过渡 Vue 的 <transition> 组件可以与 CSS 动画结合,实现文字的动态效果。例如淡入淡出: <tran…

vue中实现动画

vue中实现动画

vue中实现动画的方法 Vue提供了多种实现动画的方式,主要依赖于内置的<transition>和<transition-group>组件,以及结合CSS或JavaScript…

vue组件实现动画

vue组件实现动画

Vue 组件实现动画的方法 Vue 提供了多种方式实现组件动画,主要包括内置的 <transition> 和 <transition-group> 组件,以及结合 CSS 或…