讲师中心 微信公众号

工具推荐

视频效率加速
updream

一键生成高质量推广成片

剧云
剧云

中文短剧剧本制作平台

AniShort
AniShort

AI短剧协同制作平台

Seko
Seko

AI短剧一键生成成片

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

风芳酱_5982

风芳酱_5982

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

|

1066人浏览过

|

来源于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 类控制状态更清晰、易维护,也便于扩展其他动画(如翻转后触发回调、禁用重复点击等):

Java调试
Java调试

通过 JDWP 实现 Java 远程调试:连接远程 JVM、设置断点、单步执行代码、查看变量值、获取调用栈。适用于需要调试远程 Java 应用、排查运行时状态、追踪代码执行流程的场景。 术语注解 JDWP:Java Debug Wire Protocol,Java 调试有线协议(Java 远程调试底层通信协议) remote JVM:远程 Java 虚拟机 step through code:代码单步调试(步入 / 步过 / 步出调试) inspect variables:变量查看 / 变量检视 stac

下载

立即学习“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"><img src="/images/qmark.jpg"    style="max-width:90%" alt="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 控制——这既是分离关注点的最佳实践,也是保障动画性能与可维护性的核心原则。

热门AI工具

更多
创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

相关专题

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

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

4536

2024.01.03

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

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

326

2025.12.06

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

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

352

2023.11.23

css3transition
css3transition

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

1990

2023.06.27

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

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

20173

2025.10.16

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

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

453

2025.11.13

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

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

348

2025.12.30

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

363

2026.03.06

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

60

2026.11.06

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12.5万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.8万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn