0

0

如何用 JavaScript 实现卡片翻转(3D Flip Card)效果

聖光之護

聖光之護

发布时间:2026-02-22 11:36:02

|

946人浏览过

|

来源于php中文网

原创

如何用 JavaScript 实现卡片翻转(3D Flip Card)效果

本文详解如何结合 css 3d 变换与 javascript 事件,构建一个点击即绕 y 轴平滑翻转的交互式卡片组件,涵盖 transform-style、backface-visibility 等核心属性配置及状态管理技巧。

本文详解如何结合 css 3d 变换与 javascript 事件,构建一个点击即绕 y 轴平滑翻转的交互式卡片组件,涵盖 transform-style、backface-visibility 等核心属性配置及状态管理技巧。

实现一个真实感强、性能流畅的翻转卡片(Flip Card),关键不在于单纯调用 transform: rotateY(),而在于正确启用 3D 渲染上下文,并合理控制正反面的可见性与初始姿态。以下是一套经过验证的完整实现方案。

✅ 正确的 CSS 3D 翻转结构

首先,必须为卡片容器设置 transform-style: preserve-3d,这是启用子元素在 3D 空间中独立变换的前提;同时,正反面需使用 position: absolute 叠加,并通过 backface-visibility: hidden 隐藏翻转后不可见的一面,避免视觉穿帮:

.card {
  height: 160px;
  width: 100px;
  position: relative;
  transform-style: preserve-3d; /* 必须!启用3D空间 */
  transition: transform 0.6s cubic-bezier(0.4, 0.2, 0.2, 1); /* 缓动更自然 */
}

.card .front,
.card .back {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  border: 1px solid #333;
  border-radius: 8px;
  backface-visibility: hidden; /* 关键:隐藏背面朝向时的内容 */
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: bold;
}

.card .front {
  background-color: #2c3e50;
  color: white;
  z-index: 2; /* 确保正面初始在上层 */
}

.card .back {
  background-color: #ecf0f1;
  color: #2c3e50;
  transform: rotateY(180deg); /* 初始旋转180°,使其不可见 */
  z-index: 1;
}

/* 翻转状态:整个卡片绕Y轴旋转180° */
.card.back {
  transform: rotateY(180deg);
}

⚠️ 注意:rotateY(180deg) 是 CSS 标准写法(等价于 rotate3d(0, 1, 0, 180deg)),不是 rotateY(无效属性)或 rotatey(大小写敏感)

✅ JavaScript 状态切换逻辑(推荐 class 切换)

相比直接操作 style.transform,使用 CSS 类控制状态更清晰、易维护,也便于扩展其他动画(如翻转后触发回调、禁用重复点击等):

ExcelFormulaBot
ExcelFormulaBot

在AI帮助下将文本指令转换为Excel函数公式

下载

立即学习Java免费学习笔记(深入)”;

// 获取所有卡片(支持多卡片场景)
const cards = document.querySelectorAll('.card');

cards.forEach(card => {
  card.addEventListener('click', function() {
    this.classList.toggle('back');
  });
});

若需兼容旧版浏览器或动态生成卡片(如题中 displayNumbers() 场景),可在插入 HTML 后统一绑定事件,避免内联 onclick:

function displayNumbers() {
  generateNumber();
  for (let i of nums) {
    const cardHTML = `
      <div class="card front">
        <div class="front">@@##@@</div>
        <div class="back"><h2>${i}</h2></div>
      </div>`;
    game.insertAdjacentHTML('beforeend', cardHTML);
  }

  // 动态绑定事件(委托或遍历)
  document.querySelectorAll('.card').forEach(card => {
    card.addEventListener('click', () => card.classList.toggle('back'));
  });
}

✅ 进阶提示:提升用户体验

  • 防抖翻转:添加 pointer-events: none 到 .card.back 并在 transition 结束后恢复,防止快速连点导致状态错乱;
  • 无障碍支持:为卡片添加 role="button" 和 aria-label,例如
  • 响应式适配:在媒体查询中调整卡片尺寸与 transform 值,确保小屏下仍可点击;
  • 性能优化:对 .card 添加 will-change: transform(仅在必要时),提示浏览器提前进行 GPU 加速。
  • ✅ 总结

    一个可靠的翻转卡片 = preserve-3d(父容器) + backface-visibility: hidden(正反面) + rotateY(180deg)(初始背面姿态) + transform: rotateY(180deg)(翻转状态类)。JavaScript 仅负责状态切换,样式逻辑完全交由 CSS 控制——这既是分离关注点的最佳实践,也是保障动画性能与可维护性的核心原则。

    Front

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

686

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

22

2025.12.06

CSS position定位有几种方式
CSS position定位有几种方式

有4种,分别是静态定位、相对定位、绝对定位和固定定位。更多关于CSS position定位有几种方式的内容,可以访问下面的文章。

83

2023.11.23

css3transition
css3transition

css3transition属性用于指定如何从一个CSS样式过渡到另一个CSS样式,本专题为大家提供transition相关的文章、相关下载和相关课程,大家可以免费体验。

261

2023.06.27

PHP 高并发与性能优化
PHP 高并发与性能优化

本专题聚焦 PHP 在高并发场景下的性能优化与系统调优,内容涵盖 Nginx 与 PHP-FPM 优化、Opcode 缓存、Redis/Memcached 应用、异步任务队列、数据库优化、代码性能分析与瓶颈排查。通过实战案例(如高并发接口优化、缓存系统设计、秒杀活动实现),帮助学习者掌握 构建高性能PHP后端系统的核心能力。

107

2025.10.16

PHP 数据库操作与性能优化
PHP 数据库操作与性能优化

本专题聚焦于PHP在数据库开发中的核心应用,详细讲解PDO与MySQLi的使用方法、预处理语句、事务控制与安全防注入策略。同时深入分析SQL查询优化、索引设计、慢查询排查等性能提升手段。通过实战案例帮助开发者构建高效、安全、可扩展的PHP数据库应用系统。

96

2025.11.13

JavaScript 性能优化与前端调优
JavaScript 性能优化与前端调优

本专题系统讲解 JavaScript 性能优化的核心技术,涵盖页面加载优化、异步编程、内存管理、事件代理、代码分割、懒加载、浏览器缓存机制等。通过多个实际项目示例,帮助开发者掌握 如何通过前端调优提升网站性能,减少加载时间,提高用户体验与页面响应速度。

34

2025.12.30

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

1012

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

319

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 5.3万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.1万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号