# 灵签宝盒 **Repository Path**: guoliangjun17/Fortune-Box ## Basic Information - **Project Name**: 灵签宝盒 - **Description**: 一个模拟中国传统抽签的现代化网页应用,融合传统文化与现代技术,使用纯 HTML、CSS 和 JavaScript 实现,包含完整的 SVG 绘制和动画效果。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-21 - **Last Updated**: 2026-01-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 灵签宝盒 (Fortune Box) 一个模拟中国传统抽签的现代化网页应用,融合传统文化与现代技术,使用纯 HTML、CSS 和 JavaScript 实现,包含完整的 SVG 绘制和动画效果。 ## 项目特色 **灵签宝盒**不仅仅是一个简单的抽签应用,更是传统文化与现代编程技术的完美结合: - 🎋 **传统文化**:15条精选传统签文,承载千年智慧 - 🎨 **现代设计**:精美的SVG动画和响应式界面 - ⚡ **技术先进**:面向对象架构,符合现代开发规范 - 🎯 **用户体验**:流畅的动画效果和直观的交互设计 ## 项目名称寓意 **灵签宝盒** - 寓意着: - **灵**:灵验、灵感、心灵感应 - **签**:传统签文、占卜文化 - **宝盒**:珍贵的容器,蕴含智慧和惊喜 这个名称既体现了传统抽签的神秘感,又暗示了现代技术的精巧设计,如同一个装满智慧的宝盒,等待用户去探索和发现。 ## 功能特点 - **SVG 绘制**:使用 SVG 绘制签筒、签子等所有视觉元素 - **动画效果**: - 签筒摇晃动画 - 签子掉落动画 - 签文放大显示动画 - **简体中文签文**:包含 15 条传统签文,使用简体中文书写 - **签文解读**:每条签文都配有详细的解签说明 - **稀有度系统**:包含传说、史诗、稀有、普通四种稀有度,不同稀有度有不同的视觉效果 - **保底机制**:连续抽签10次后提高传说签概率,20次必出传说签 - **响应式设计**:适配不同屏幕尺寸 ## 代码架构优化 (2024年最新版本) 本项目已按照《重构》一书的最佳实践进行了全面重构,解决了以下代码坏味道: ### 重构改进点 1. **消除过长函数**:将原来的大函数拆分为职责单一的小函数 2. **解决神秘命名**:所有变量和函数都使用描述性命名 3. **消除重复代码**:提取公共逻辑到独立的方法中 4. **引入面向对象设计**:使用类来组织相关功能,提高代码可维护性 ### 架构设计 采用面向对象的模块化设计,包含以下核心类: - **LotteryController**:主控制器,协调各个组件 - **DOMElementManager**:DOM元素管理器,统一管理页面元素 - **LotteryStateManager**:状态管理器,管理抽签状态和保底机制 - **AnimationController**:动画控制器,处理所有动画效果 - **FortuneSelector**:签文选择器,负责加权随机选择逻辑 - **FortuneDisplayer**:签文显示器,负责UI更新 ### 配置化设计 - **FORTUNE_CONFIG**:集中管理所有配置参数 - **稀有度权重配置**:可灵活调整各稀有度的出现概率 - **保底机制配置**:可自定义保底触发条件 - **动画时长配置**:统一管理动画时长参数 ## 文件结构 ``` 灵签宝盒/ ├── index.html # 主页面 - 灵签宝盒的入口 ├── style.css # 样式文件 - 精美的视觉效果 ├── script.js # 核心逻辑 - 面向对象的抽签系统 └── README.md # 项目文档 - 详细的使用说明 ``` ## 核心类说明 ### LotteryController (主控制器) - 协调各个组件完成抽签流程 - 管理事件监听和错误处理 - 提供统一的抽签入口 ### DOMElementManager (DOM管理器) - 统一管理所有DOM元素的获取 - 避免重复的getElementById调用 - 提供类型安全的元素访问 ### LotteryStateManager (状态管理器) - 管理抽签状态(是否正在抽签) - 实现保底机制的连续抽签计数 - 提供状态查询和重置功能 ### AnimationController (动画控制器) - 封装所有动画逻辑 - 使用Promise处理异步动画序列 - 统一管理动画状态和样式 ### FortuneSelector (签文选择器) - 实现加权随机选择算法 - 处理保底机制的概率调整 - 支持灵活的稀有度配置 ### FortuneDisplayer (显示控制器) - 负责更新UI显示内容 - 管理按钮状态和容器显示 - 分离显示逻辑和业务逻辑 ## 使用方法 1. 直接在浏览器中打开 `index.html` 文件 2. 点击"开始抽签"按钮 3. 观看签筒摇晃和签子掉落动画 4. 查看抽到的签文和解签内容 5. 点击"重新抽签"按钮可以再次抽签 ## 保底机制说明 - **普通抽签**:传说签2%,史诗签8%,稀有签20%,普通签70% - **保底触发**:连续10次未抽到传说签时,传说签概率提升至6% - **必出保底**:连续20次未抽到传说签时,下次必出传说签 - **计数重置**:抽到传说签后,连续计数重置为0 ## 技术实现 ### 面向对象设计模式 - **单一职责原则**:每个类只负责一个特定功能 - **开闭原则**:通过配置对象支持扩展,无需修改核心代码 - **依赖注入**:通过构造函数注入依赖,降低耦合度 - **组合模式**:主控制器组合各个功能模块 ### 异步编程 - 使用Promise处理动画序列 - async/await语法简化异步代码 - 错误处理机制保证程序稳定性 ### 签文数据结构 - 15 条传统签文,包含上上签、上签、中上签、中签等不同等级 - 每条签文包含:签号、等级、四句诗文、详细解读、稀有度、分类 - 使用简体中文,符合现代阅读习惯 ### 配置化管理 ```javascript const FORTUNE_CONFIG = { RARITY_WEIGHTS: { legendary: 2, // 传说签概率 epic: 8, // 史诗签概率 rare: 20, // 稀有签概率 common: 70 // 普通签概率 }, PITY_SYSTEM: { LEGENDARY_PITY_THRESHOLD: 10, // 保底触发阈值 GUARANTEED_LEGENDARY: 20, // 必出传说签次数 LEGENDARY_BOOST_MULTIPLIER: 3 // 概率提升倍数 }, ANIMATION_DURATION: { SHAKE: 800, // 摇晃动画时长 FALL: 1500, // 掉落动画时长 ZOOM_IN: 800 // 放大动画时长 } }; ``` ## 代码质量保证 ### 重构实践 - 消除了所有主要的代码坏味道 - 函数长度控制在合理范围内 - 使用描述性命名,代码自解释 - 避免重复代码,提取公共逻辑 ### 错误处理 - 完善的异常捕获和处理机制 - 用户友好的错误提示 - 程序异常时的状态恢复 ### 性能优化 - 避免不必要的DOM操作 - 使用事件委托减少内存占用 - 合理的动画时长和效果 ## 浏览器兼容性 支持所有现代浏览器: - Chrome / Edge (推荐) - Firefox - Safari - Opera ## 自定义扩展 ### 添加更多签文 在 `script.js` 的 `fortuneDatabase` 数组中添加新的签文对象: ```javascript { number: "第十六签", title: "上签", text: "您的签文内容\n四句诗文\n每句一行\n格式统一", meaning: "详细的解签说明...", rarity: "epic", // 稀有度:legendary/epic/rare/common category: "事业" // 分类:事业/学业/感情/家庭等 } ``` ### 调整概率配置 修改 `FORTUNE_CONFIG.RARITY_WEIGHTS` 中的数值: ```javascript RARITY_WEIGHTS: { legendary: 5, // 提高传说签概率到5% epic: 15, // 提高史诗签概率到15% rare: 30, // 提高稀有签概率到30% common: 50 // 普通签概率相应降低到50% } ``` ### 自定义保底机制 修改 `FORTUNE_CONFIG.PITY_SYSTEM` 参数: ```javascript PITY_SYSTEM: { LEGENDARY_PITY_THRESHOLD: 5, // 5次后开始保底 GUARANTEED_LEGENDARY: 10, // 10次必出传说签 LEGENDARY_BOOST_MULTIPLIER: 5 // 保底时概率提升5倍 } ``` ### 修改动画效果 在 `style.css` 中可以自定义: - 颜色主题和渐变效果 - 动画速度和缓动函数 - 字体大小和样式 - 布局和间距 ### 扩展稀有度系统 1. 在签文数据中添加新的稀有度 2. 在 `RARITY_WEIGHTS` 中配置概率 3. 在 `style.css` 中添加对应的视觉效果类 4. 在 `AnimationController._applyRarityStyle` 中添加样式映射 ## 开发建议 ### 代码维护 - 遵循单一职责原则,保持类的职责清晰 - 新增功能时优先考虑扩展现有类,而非修改 - 保持配置和业务逻辑的分离 - 添加适当的注释说明复杂逻辑 ### 性能考虑 - 避免在动画过程中进行复杂计算 - 合理使用防抖和节流机制 - 注意内存泄漏,及时清理事件监听器 - 考虑使用Web Workers处理复杂的概率计算 ## 注意事项 - 本应用为娱乐性质,签文内容仅供参考 - 所有签文均为传统文化元素,使用简体中文呈现 - 建议在现代浏览器中使用以获得最佳体验 - 代码已按照《重构》最佳实践进行优化,便于维护和扩展 ## 开发环境 - 无需任何构建工具或依赖 - 纯静态文件,可直接部署到任何 Web 服务器 - 适合学习面向对象JavaScript、SVG动画和重构实践 - 代码结构清晰,适合作为教学案例 **灵签宝盒**展示了如何将传统文化与现代技术完美结合,是学习前端开发和代码重构的优秀案例。 ## 更新日志 ### v2.0.0 "灵签宝盒" (2024年优化版) - 🎋 **项目重命名**:从"传统抽签"升级为"灵签宝盒" - 🔄 **重大重构**:采用面向对象设计,解决所有主要代码坏味道 - ✨ **新增功能**:稀有度系统和保底机制 - 🎨 **视觉优化**:不同稀有度的特殊视觉效果 - 📈 **性能提升**:优化动画性能和内存使用 - 🛠️ **可维护性**:模块化设计,便于扩展和维护 - 📚 **文档完善**:详细的架构说明和使用指南 ### v1.0.0 (初始版本) - 基础抽签功能 - SVG绘制和动画效果 - 10条传统签文 ## 许可证 **灵签宝盒**项目仅供学习和娱乐使用,展示了现代JavaScript重构实践与传统文化的完美融合。