使用ES7+ React实现卡牌的翻转功能

状态定义

 

// 状态用于跟踪每张牌是否翻转 const [flippedCards, setFlippedCards] = useState([]); const [computerFlippedCards, setComputerFlippedCards] = useState(Array(5).fill(false));

卡片组件 (Card)

 

jsx

const Card = ({ card, isFlipped }) => { return ( <div className={`flip-card ${isFlipped ? 'flipped' : ''}`}> <div className="flip-card-inner"> <div className="flip-card-front">背面</div> <div className="flip-card-back">{card}</div> </div> </div> ); };

发牌并添加动画效果 (dealCardsWithAnimation)

 

jsx

const dealCardsWithAnimation = () => { // ...洗牌逻辑... // 初始化玩家手牌的翻转状态数组 setFlippedCards(Array(5).fill(false)); // 初始化电脑手牌的翻转状态数组 setComputerFlippedCards(Array(5).fill(false)); // 分配玩家手牌并设置翻转动画 playerHand.forEach((_, index) => { setTimeout(() => { setFlippedCards(prevFlipped => { const newFlipped = [...prevFlipped]; newFlipped[index] = true; return newFlipped; }); }, index * 300); }); // ...电脑手牌的翻转动画逻辑... };

渲染翻转的卡片

 

// 玩家手牌展示 {playerCards.map((card, index) => ( <Card key={index} card={card} isFlipped={flippedCards[index]} /> ))} // 电脑手牌展示(示例中电脑手牌始终显示正面,根据需求调整) {computerCards.map((card, index) => ( <Card key={index + 'c'} card={card} isFlipped={true} /> ))}

以上代码片段展示了如何定义翻转状态、创建带有翻转效果的卡片组件、初始化翻转状态数组、实现发牌时的翻转动画效果,以及如何在界面中渲染这些带有翻转效果的卡片。

涉及卡牌翻转功能的CSS代码主要集中在.flip-card及其相关类中,这些样式控制了卡牌翻转的视觉效果。下面是直接相关的代码段:

 

css

.flip-card { width: 15%; /* 调整宽度以适应横向展示,具体数值可根据实际情况调整 */ height: auto; /* 自动计算高度以保持宽高比 */ perspective: 1000px; /* 设置透视距离,影响3D翻转效果的深度 */ border-radius: 8px; /* 添加圆角让卡牌边缘更柔和 */ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); /* 添加阴影效果 */ } .flip-card-inner { position: relative; width: 100%; height: 100%; text-align: center; transition: transform 0.6s; /* 定义翻转过渡效果的持续时间 */ transform-style: preserve-3d; /* 保持子元素的3D空间 */ } .flip-card.flipped .flip-card-inner { transform: rotateY(180deg); /* 当添加.flipped类时,执行Y轴旋转180度实现翻转 */ } .flip-card-front, .flip-card-back { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; /* 隐藏背面,使得翻转时看不到背面内容 */ } /* 具体的前后面对应样式可以根据需要调整,例如颜色、背景等 */ .flip-card-front {...} .flip-card-back {...}

这段代码通过CSS3的3D变换(transform属性)实现了卡牌的翻转效果,同时利用了transition属性来平滑过渡这个变换过程,使得翻转动作看起来更加自然流畅。.flip-card.flipped .flip-card-inner这一规则是关键所在,它依赖于JavaScript动态添加或移除.flipped类来触发卡牌的翻转动画。

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值