当前位置:首页 > React

react如何设置动画

2026-02-26 16:39:46React

使用 CSS 过渡动画

在 React 中可以通过 CSS 的 transition 属性实现简单的动画效果。定义一个 CSS 类,并通过 className 动态切换来触发动画。

.fade-in {
  opacity: 1;
  transition: opacity 0.5s ease-in;
}
.fade-out {
  opacity: 0;
  transition: opacity 0.5s ease-out;
}

在组件中通过状态控制类名切换:

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

  return (
    <div className={isVisible ? 'fade-in' : 'fade-out'}>
      Content to animate
    </div>
  );
}

使用 CSS 关键帧动画

通过 @keyframes 定义更复杂的动画,结合 animation 属性实现。

@keyframes slide-in {
  from { transform: translateX(-100%); }
  to { transform: translateX(0); }
}
.slide {
  animation: slide-in 1s forwards;
}

在组件中直接应用类名:

function SlideComponent() {
  return <div className="slide">Sliding content</div>;
}

使用 React Transition Group

react-transition-group 库提供了组件化的动画控制方式,适合管理进入和离开的动画。

安装库:

npm install react-transition-group

示例代码:

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

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

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

配套 CSS:

.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 是一个强大的动画库,支持声明式动画和复杂交互。

安装库:

npm install framer-motion

示例代码:

import { motion } from 'framer-motion';

function MotionExample() {
  return (
    <motion.div
      initial={{ opacity: 0 }}
      animate={{ opacity: 1 }}
      transition={{ duration: 0.5 }}
    >
      Animated with Framer Motion
    </motion.div>
  );
}

支持更复杂的动画如拖动、手势等:

<motion.div
  drag
  whileHover={{ scale: 1.1 }}
  whileTap={{ scale: 0.9 }}
/>

使用 React Spring

react-spring 基于物理模型的动画库,适合流畅的弹簧动画效果。

安装库:

npm install react-spring

示例代码:

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

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

  return <animated.div style={props}>Hello React Spring</animated.div>;
}

支持复杂的动画组合:

const [flip, setFlip] = useState(false);
const { transform } = useSpring({
  transform: `rotateY(${flip ? 180 : 0}deg)`,
  onRest: () => setFlip(!flip),
});

性能优化建议

避免在渲染函数中频繁计算动画值,优先使用 CSS 硬件加速属性(如 transformopacity)。对于列表动画,使用 React.memouseMemo 减少不必要的渲染。

通过以上方法,可以根据需求选择适合的动画实现方式,从简单 CSS 过渡到复杂的物理动画均可覆盖。

react如何设置动画

分享给朋友:

相关文章

vue哪个组件实现动画

vue哪个组件实现动画

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

vue实现路由动画

vue实现路由动画

路由动画的实现方法 在Vue中实现路由动画通常结合<transition>组件和Vue Router的导航守卫。以下是几种常见实现方式: 基础过渡动画 <template>…

vue实现border动画

vue实现border动画

实现边框动画的方法 在Vue中实现边框动画可以通过CSS动画或过渡效果结合Vue的动态样式绑定来实现。以下是几种常见的方法: 使用CSS过渡和Vue的class绑定 通过动态添加或移除CSS类来触…

vue 实现文字动画

vue 实现文字动画

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

vue实现动画代码

vue实现动画代码

Vue 动画实现方法 Vue 提供了多种方式实现动画效果,包括内置过渡组件、CSS 动画库集成以及第三方动画库结合。以下是几种常见实现方法: 使用 Vue 内置过渡组件 Vue 的 <tr…

vue实现首页动画

vue实现首页动画

Vue 实现首页动画的方法 在 Vue 中实现首页动画可以通过多种方式,包括使用 CSS 动画、Vue 过渡效果、第三方动画库等。以下是一些常见的实现方法。 使用 CSS 动画 通过 Vue 的…