3dBackgroundBoxes(3D背景盒子组件)项目及文章思路
一、项目概述
- 项目挑战:50天50个小项目挑战中的"3dBackgroundBoxes"组件
- 项目核心:使用Vue 3的
<script setup>
语法结合Tailwind CSS创建交互式动画组件"魔法盒子" - 交互效果:点击"Magic"按钮时,盒子阵列放大并旋转,带来神奇视觉体验
- 项目资源:仓库地址与项目预览地址
二、应用目标
- 运用Vue 3 Composition API管理响应式状态
- 动态生成4×4的盒子网格
- 实现点击按钮触发整体缩放与旋转动画
- 利用背景定位实现Gif动画的分块显示
- 添加3D边框效果增强立体感
- 使用Tailwind CSS快速构建布局与过渡效果
三、技术实现点
技术点 | 描述 |
---|---|
Vue 3 <script setup> |
使用ref 和onMounted 管理状态与生命周期 |
响应式数据isBig 和boxes |
控制动画状态与盒子位置 |
v-for 循环生成 |
创建16个盒子元素 |
@click 事件绑定 |
触发尺寸切换 |
动态类名绑定:class |
根据状态切换样式 |
内联样式:style |
精确控制每个盒子的背景位置 |
Tailwind过渡动画 | 实现平滑的尺寸与旋转变化 |
四、组件实现
-
模板结构
- 魔法按钮:固定在顶部,点击后切换
isBig
状态 - 盒子容器:包含16个盒子,每个盒子显示Gif图片的不同区域,并带有3D边框
- 魔法按钮:固定在顶部,点击后切换
-
脚本逻辑
- 响应式状态管理:定义
isBig
响应式变量控制动画状态,定义boxes
数组存储每个盒子的背景偏移位置 - 创建盒子数据:通过
createBoxes()
函数生成4×4的盒子数据 - 生命周期管理:在
onMounted
钩子中调用createBoxes()
生成盒子
- 响应式状态管理:定义
-
Tailwind CSS样式重点
类名 作用 h-screen
设置高度为视口高度 flex-col
垂直方向Flex布局 items-center
/justify-center
居中对齐 overflow-hidden
隐藏溢出内容 bg-gray-100
设置背景色 fixed top-5
按钮固定在顶部 z-50
提升按钮层级 transform
启用变换 rounded
圆角按钮 bg-yellow-400
/text-white
按钮颜色 shadow-md
/hover:shadow-lg
阴影效果 active:translate-y-1
按下时向下移动 active:shadow-none
按下时隐藏阴影 relative
/flex-wrap
容器布局 transition-all duration-400
0.4s平滑过渡 h-[125px] w-[125px]
固定盒子尺寸 rotate-360
/rotate-0
控制旋转状态 absolute top-2 right-[-15px]
创建右侧斜面 skew-y-12
Y轴倾斜12度 bg-yellow-200
/bg-yellow-400
3D边框颜色
五、关键功能解析
- 背景分块显示技术:设置
backgroundSize: '500px 500px'
并为每个盒子设置不同的backgroundPosition
,实现大图(或Gif)切割成16块分别显示 - 动画同步控制:使用
isBig
变量统一控制容器尺寸和所有盒子的旋转状态,确保动画同步 - 3D边框模拟:利用两个倾斜的
div
(.skew-y-12
和.skew-x-12
)模拟立体边框效果,增强视觉层次感
六、常量定义与组件路由
- 常量定义:在
constants/index.js
中添加组件预览常量 - 组件路由:在
router/index.js
中添加路由选项
七、总结与扩展
- 项目总结
- 扩展建议
- 添加音效:点击时播放魔法音效
- 随机旋转角度:每个盒子旋转角度不同
- 颜色主题切换:支持多种配色方案
- 手势控制:支持触摸滑动触发动画
- 粒子特效:点击时释放小星星或火花动画
- 下一篇预告:完成
VerifyAccountUi
组件,实现验证码UI组件