当前位置:首页 > 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:

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

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

react实现卡片动画

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

相关文章

vue 实现卡片拖动

vue 实现卡片拖动

Vue 实现卡片拖动的几种方法 使用 Vue 实现卡片拖动可以通过多种方式实现,以下是几种常见的方法: 使用 HTML5 原生拖放 API HTML5 提供了原生的拖放 API,可以通过 drag…

vue实现动画

vue实现动画

Vue 动画实现方法 Vue 提供了多种方式实现动画效果,主要通过内置组件和 CSS 过渡/动画实现。 使用 <transition> 组件 Vue 的 <transition&…

react如何动画

react如何动画

React 动画实现方法 React 中实现动画可以通过多种方式,包括原生 CSS、第三方库或 React 内置的动画解决方案。以下是几种常见方法: 使用 CSS 动画和过渡 通过 CSS 的 t…

jquery 动画

jquery 动画

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

vue实现卡片

vue实现卡片

Vue实现卡片的基本方法 使用Vue实现卡片组件可以通过多种方式,以下是几种常见的方法: 使用原生HTML和CSS结合Vue数据绑定 <template> <div cl…

vue实现gif动画

vue实现gif动画

在Vue中实现GIF动画 使用<img>标签直接引入GIF文件 在Vue组件中,可以直接通过<img>标签引入GIF文件。确保GIF文件已放置在项目的静态资源目录(如publ…