# 加载动画系统清理与文本效果修复 - 设计文档 ## 1. 架构概述 本次优化分为两个独立模块: 1. **加载动画清理模块**:移除旧代码,统一使用 `PageLoader` 2. **文本效果修复模块**:为文本特效添加文章容器选择器支持 ## 2. 加载动画清理设计 ### 2.1 问题分析 **旧代码位置**:`argontheme.js` 第 4970-5040 行 **旧代码特征**: - 使用 `article-loading-overlay` ID - 手动创建 DOM 元素和骨架屏 HTML - 使用 `setInterval` 模拟进度 - 监听 `window.load` 事件 - PJAX 事件处理中重复创建相同元素 **新系统特征**: - 使用 `PageLoader` 模块(IIFE 封装) - 统一的 `loading-*` 类名前缀 - SVG 圆环进度指示器 - 智能进度算法(缓动函数) - 延迟显示和最小显示时间控制 ### 2.2 清理策略 #### 2.2.1 页面初始加载 **旧代码**(需移除): ```javascript // 第 4970-4995 行 var bar = document.getElementById('page-loading-bar'); // ... 创建 article-loading-overlay ... window.addEventListener('load', function() { ... }); ``` **新方案**: - 在 `DOMContentLoaded` 时调用 `PageLoader.show()` - 在 `window.load` 时调用 `PageLoader.hide()` - 已在现有代码中实现,无需修改 #### 2.2.2 PJAX 加载动画 **旧代码**(需移除): ```javascript // 第 4997-5033 行 function initPjaxAnimations() { jQuery(document).on('pjax:start', function() { // ... 创建 article-loading-overlay ... }); jQuery(document).on('pjax:end', function() { // ... 移除 overlay ... }); } ``` **新方案**: - `pjax:start` 时调用 `PageLoader.show()` - `pjax:end` 时调用 `PageLoader.hide()` - 需要新增此部分代码 ### 2.3 实现步骤 1. **定位旧代码**:确认第 4970-5040 行的完整范围 2. **移除旧代码**:删除整个旧的加载动画实现 3. **添加 PJAX 支持**:在 `PageLoader` 模块后添加 PJAX 事件监听 4. **测试验证**:确保页面加载和 PJAX 导航都正常 ### 2.4 新增 PJAX 集成代码 ```javascript // PJAX 加载动画集成 if (typeof jQuery !== 'undefined') { jQuery(document).on('pjax:start', function() { PageLoader.show(); }); jQuery(document).on('pjax:end', function() { PageLoader.hide(); // 重新初始化页面动画 setTimeout(function() { initImageLoadAnimation(); initScrollAnimations(); initSmoothScroll(); }, 100); }); } ``` ## 3. 文本效果修复设计 ### 3.1 问题分析 **当前样式选择器**: ```css .color-curtain { ... } .text-blur { ... } .huhua { ... } ``` **问题**: - 缺少文章容器选择器(`article .entry-content`、`.article-content`) - 在某些文章布局中可能不生效 ### 3.2 修复策略 参考黑幕样式的修复方式,为每个文本效果添加文章容器选择器。 #### 3.2.1 彩色黑幕(color-curtain) **当前样式**: ```css .color-curtain, .color-curtain a, a .color-curtain, .color-curtain a.new { background-color: var(--curtain-bg, #252525) !important; color: var(--curtain-bg, #252525) !important; /* ... */ } ``` **修复方案**: ```css /* 基础样式 */ .color-curtain, article .entry-content .color-curtain, .article-content .color-curtain { background-color: var(--curtain-bg, #252525) !important; color: var(--curtain-bg, #252525) !important; /* ... */ } /* 链接样式 */ .color-curtain a, article .entry-content .color-curtain a, .article-content .color-curtain a { color: inherit !important; /* ... */ } /* 悬停样式 */ .color-curtain:hover, article .entry-content .color-curtain:hover, .article-content .color-curtain:hover { color: var(--curtain-fg, #fff) !important; } ``` **夜间模式优化**: ```css html.darkmode .color-curtain, html.darkmode article .entry-content .color-curtain, html.darkmode .article-content .color-curtain { --curtain-bg: #1a1a1a; --curtain-fg: #e0e0e0; } ``` #### 3.2.2 模糊文本(text-blur) **当前样式**: ```css .text-blur, .text-blur a, a .text-blur, .text-blur a.new { filter: blur(2px) !important; /* ... */ } ``` **修复方案**: ```css .text-blur, article .entry-content .text-blur, .article-content .text-blur { filter: blur(2px) !important; transition: filter var(--text-blur-transition-time, .2s) ease; display: inline-block; } .text-blur:hover, article .entry-content .text-blur:hover, .article-content .text-blur:hover { filter: none !important; } ``` #### 3.2.3 划掉文本(huhua) **当前样式**: ```css .huhua { color: #9ea3a9 !important; text-decoration: line-through !important; /* ... */ } ``` **修复方案**: ```css .huhua, article .entry-content .huhua, .article-content .huhua { color: #9ea3a9 !important; text-decoration: line-through !important; text-shadow: none !important; transition: color .2s ease; } .huhua:hover, article .entry-content .huhua:hover, .article-content .huhua:hover { color: #7f858b !important; } ``` **夜间模式优化**: ```css html.darkmode .huhua, html.darkmode article .entry-content .huhua, html.darkmode .article-content .huhua { color: #6a7075 !important; } html.darkmode .huhua:hover, html.darkmode article .entry-content .huhua:hover, html.darkmode .article-content .huhua:hover { color: #555a5f !important; } ``` ### 3.3 代码组织 在 `style.css` 中重新组织文本效果样式: ``` /* ========================================================================== 文章文本特效(Text Effects in Articles) ========================================================================== */ /* ---------- 彩色黑幕(Color Curtain) ---------- */ /* 基础样式 */ /* 链接样式 */ /* 悬停样式 */ /* 夜间模式 */ /* ---------- 模糊文本(Text Blur) ---------- */ /* 基础样式 */ /* 悬停样式 */ /* ---------- 划掉文本(Strikethrough) ---------- */ /* 基础样式 */ /* 悬停样式 */ /* 夜间模式 */ ``` ## 4. 正确性属性(Correctness Properties) ### 4.1 加载动画属性 **Property 1.1**: 页面加载时必须显示加载动画 - **验证方式**:刷新页面,观察是否出现 SVG 圆环进度指示器 - **预期行为**:`DOMContentLoaded` 后显示,`window.load` 后隐藏 **Property 1.2**: PJAX 导航时必须显示加载动画 - **验证方式**:点击文章链接,观察是否出现加载动画 - **预期行为**:`pjax:start` 后显示,`pjax:end` 后隐藏 **Property 1.3**: 不存在旧的 `article-loading-overlay` 元素 - **验证方式**:检查 DOM 树和控制台 - **预期行为**:只有 `loading-overlay` 元素,无 `article-loading-overlay` ### 4.2 文本效果属性 **Property 2.1**: 文本效果在文章中可见 - **验证方式**:在文章中添加 `测试` - **预期行为**:文本被彩色背景遮盖 **Property 2.2**: 悬停时文本效果正确响应 - **验证方式**:鼠标悬停在文本效果上 - **预期行为**: - `color-curtain`:显示文本内容 - `text-blur`:取消模糊 - `huhua`:颜色变深 **Property 2.3**: 夜间模式下颜色正确 - **验证方式**:切换到夜间模式,检查文本效果颜色 - **预期行为**:使用夜间模式专用颜色变量 ## 5. 测试策略 ### 5.1 单元测试(手动) 1. **页面初始加载** - 刷新页面 - 观察加载动画是否正常显示和隐藏 - 检查控制台是否有错误 2. **PJAX 导航** - 点击文章链接 - 观察加载动画是否正常显示和隐藏 - 检查页面内容是否正确更新 3. **文本效果显示** - 在文章编辑器中添加测试内容: ```html 彩色黑幕测试 模糊文本测试 划掉文本测试 ``` - 发布文章并查看效果 4. **文本效果交互** - 鼠标悬停在每个文本效果上 - 验证交互行为是否正确 5. **夜间模式** - 切换到夜间模式 - 重复步骤 3 和 4 ### 5.2 回归测试 - 验证其他页面功能未受影响 - 验证移动端响应式布局正常 - 验证浏览器兼容性(Chrome、Firefox、Safari、Edge) ## 6. 风险评估 ### 6.1 高风险 - **PJAX 功能失效**:移除旧代码可能影响 PJAX 导航 - **缓解措施**:仔细测试 PJAX 导航,确保新代码正确集成 ### 6.2 中风险 - **样式冲突**:新增选择器可能与现有样式冲突 - **缓解措施**:使用 `!important` 确保优先级,参考黑幕样式的成功经验 ### 6.3 低风险 - **性能影响**:新增选择器可能轻微影响 CSS 性能 - **缓解措施**:选择器数量有限,影响可忽略 ## 7. 实施计划 ### Phase 1: 清理旧加载动画代码 1. 备份 `argontheme.js` 2. 移除第 4970-5040 行旧代码 3. 添加 PJAX 集成代码 4. 测试页面加载和 PJAX 导航 ### Phase 2: 修复文本效果样式 1. 备份 `style.css` 2. 重构 `color-curtain` 样式 3. 重构 `text-blur` 样式 4. 重构 `huhua` 样式 5. 添加夜间模式优化 6. 测试所有文本效果 ### Phase 3: 验证和提交 1. 完整回归测试 2. 检查代码规范 3. 编写详细的 Git commit 信息 4. 提交代码 ## 8. 成功标准 - ✅ 旧加载动画代码完全移除 - ✅ 页面加载和 PJAX 导航动画正常工作 - ✅ 所有文本效果在文章中正常显示和交互 - ✅ 夜间模式下颜色正确 - ✅ 无控制台错误或警告 - ✅ 代码遵循项目规范 - ✅ Git commit 信息详细清晰