当前位置:首页 > React

react实现卡片动画

2026-01-27 02:04:31React

React 实现卡片动画的方法

使用 CSS Transition 实现基础动画

在 React 组件中直接通过 CSS 的 transition 属性实现平滑动画效果。定义一个卡片组件,通过状态控制类名变化触发动画。

import React, { useState } from 'react';
import './Card.css';

function Card() {
  const [isHovered, setIsHovered] = useState(false);

  return (
    <div 
      className={`card ${isHovered ? 'hovered' : ''}`}
      onMouseEnter={() => setIsHovered(true)}
      onMouseLeave={() => setIsHovered(false)}
    >
      Card Content
    </div>
  );
}

配套 CSS 文件:

.card {
  width: 200px;
  height: 200px;
  background: #fff;
  box-shadow: 0 2px 5px rgba(0,0,0,0.1);
  transition: all 0.3s ease;
}

.card.hovered {
  transform: translateY(-5px);
  box-shadow: 0 5px 15px rgba(0,0,0,0.2);
}

使用 React Spring 实现物理动画

通过 react-spring 库实现更复杂的物理动画效果,支持弹簧动画、轨迹动画等高级特性。

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

function SpringCard() {
  const [active, setActive] = useState(false);

  const styles = useSpring({
    transform: active ? 'scale(1.05)' : 'scale(1)',
    boxShadow: active 
      ? '0 10px 20px rgba(0,0,0,0.2)' 
      : '0 2px 5px rgba(0,0,0,0.1)',
    config: { mass: 1, tension: 300, friction: 15 }
  });

  return (
    <animated.div
      style={styles}
      onMouseEnter={() => setActive(true)}
      onMouseLeave={() => setActive(false)}
      className="card"
    >
      Spring Card
    </animated.div>
  );
}

使用 Framer Motion 实现声明式动画

framer-motion 提供更简洁的声明式动画 API,支持手势动画和布局动画。

import { motion } from 'framer-motion';

function MotionCard() {
  return (
    <motion.div
      className="card"
      whileHover={{ scale: 1.05 }}
      whileTap={{ scale: 0.95 }}
      initial={{ opacity: 0 }}
      animate={{ opacity: 1 }}
      transition={{ duration: 0.5 }}
    >
      Framer Motion Card
    </motion.div>
  );
}

实现卡片翻转效果

通过 3D 变换实现双面卡片翻转效果,结合 React 状态管理控制翻转状态。

function FlipCard() {
  const [flipped, setFlipped] = useState(false);

  return (
    <div 
      className={`flip-card ${flipped ? 'flipped' : ''}`}
      onClick={() => setFlipped(!flipped)}
    >
      <div className="flip-card-inner">
        <div className="flip-card-front">
          Front Content
        </div>
        <div className="flip-card-back">
          Back Content
        </div>
      </div>
    </div>
  );
}

配套 CSS:

.flip-card {
  perspective: 1000px;
  width: 200px;
  height: 200px;
}

.flip-card-inner {
  position: relative;
  width: 100%;
  height: 100%;
  transition: transform 0.6s;
  transform-style: preserve-3d;
}

.flip-card.flipped .flip-card-inner {
  transform: rotateY(180deg);
}

.flip-card-front, .flip-card-back {
  position: absolute;
  width: 100%;
  height: 100%;
  backface-visibility: hidden;
}

.flip-card-back {
  transform: rotateY(180deg);
}

卡片入场动画

结合 React 生命周期或 Hooks 实现卡片列表的入场动画效果。

import { useEffect, useRef } from 'react';

function AnimatedList() {
  const cards = [1, 2, 3, 4];
  const refs = useRef([]);

  useEffect(() => {
    refs.current.forEach((el, i) => {
      el.style.animation = `fadeIn 0.5s ease ${i * 0.1}s forwards`;
    });
  }, []);

  return (
    <div className="card-list">
      {cards.map((card, i) => (
        <div 
          key={card}
          ref={el => refs.current[i] = el}
          className="card"
          style={{ opacity: 0 }}
        >
          Card {card}
        </div>
      ))}
    </div>
  );
}

配套 CSS:

react实现卡片动画

@keyframes fadeIn {
  from { opacity: 0; transform: translateY(20px); }
  to { opacity: 1; transform: translateY(0); }
}

.card-list .card {
  margin-bottom: 10px;
}

标签: 卡片动画
分享给朋友:

相关文章

vue实现卡片

vue实现卡片

Vue 实现卡片组件的方法 使用 Vue 实现卡片组件可以通过多种方式完成,以下是几种常见的实现方法: 使用原生 HTML 和 CSS 在 Vue 单文件组件中,可以通过模板和样式直接实现卡片效果…

vue实现共享动画

vue实现共享动画

Vue 共享动画实现方法 使用 Vue Transition 组件 Vue 内置的 Transition 组件可以实现元素进入/离开的过渡效果。通过命名过渡和 mode 属性可以控制多个元素的过渡顺序…

vue实现过渡动画

vue实现过渡动画

Vue 过渡动画实现方法 Vue 提供了内置的 <transition> 和 <transition-group> 组件,用于处理进入/离开过渡和列表动画。以下是几种常见的实现…

vue实现加载动画

vue实现加载动画

Vue 实现加载动画的方法 在 Vue 中实现加载动画可以通过多种方式完成,以下是一些常见的方法: 使用 CSS 动画 通过 CSS 定义动画效果,结合 Vue 的动态类绑定实现加载动画。以下是一个…

vue实现动画代码

vue实现动画代码

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

vue实现停止动画

vue实现停止动画

停止动画的方法 在Vue中停止动画可以通过多种方式实现,具体取决于动画的实现方式(CSS动画、JavaScript动画或第三方库如GSAP)。 使用CSS动画 通过动态绑定类名或样式来控制动画的播放…