像素织梦 (PixelKnit) v2.0:模块化架构重构与用户体验全面升级

系列文章 PixelKnit 像素织梦第 3 篇 / 共 3 篇

从 Canvas 编织图编辑器到模块化架构——一个前端应用从原型到工程化的完整演进记录。

  1. 像素织梦 (PixelKnit):一个功能完整的Web编织辅助工具
  2. 像素织梦 (PixelKnit) v1.1:像素地图编辑器与完整地图管理系统
  3. 像素织梦 (PixelKnit) v2.0:模块化架构重构与用户体验全面升级

引言

在 v1.1 版本发布后,像素织梦 (PixelKnit) 已经成为一个功能完整的编织引导应用。但随着功能的不断扩展,原有的单体代码结构逐渐变得难以维护。因此,我们推出了 v2.0 版本,进行了全面的架构重构和用户体验升级。

像素织梦 v2.0 - 从单体应用到模块化架构,从功能堆砌到用户体验优化。

应用Logo 图1:像素织梦 (PixelKnit) Logo - 像素艺术风格的品牌标识

🆕 v2.0 版本亮点

v2.0 版本的核心更新

  • 🏗️ 模块化架构重构:采用 ES6 模块化设计,代码结构清晰、易于维护
  • 📐 三栏布局设计:优化的布局系统,避免内容遮挡
  • 👁️ 侧边栏显示/隐藏:专注模式,可隐藏左右侧边栏
  • 🎯 悬浮mini菜单:可拖动的快捷操作菜单
  • 📏 智能视图放大:隐藏侧边栏时自动扩大中间视图
  • 🔗 智能导航链接:自动适配不同环境的导航系统

v2.0版本主界面 图2:v2.0 版本主界面,展示三栏布局和模块化架构

模块化架构重构

架构设计理念

v2.0 版本最重要的更新是进行了全面的模块化架构重构。原有的 3000+ 行单体代码被拆分为多个独立的模块,每个模块职责明确,便于维护和扩展。

架构设计原则

  • 单一职责原则:每个模块只负责一个明确的功能
  • 依赖注入:通过参数传递依赖,避免全局变量
  • 接口隔离:模块间通过明确的接口进行通信
  • 开闭原则:对扩展开放,对修改关闭

模块结构

项目采用 ES6 模块化设计,将功能拆分为以下模块:

工具类模块 (utils/)

Algorithms.js - 路径计算算法

  • calculatePath(p1, p2): Bresenham 直线算法
  • calculateAllDiagonalPaths(gridData, colorMap): 对角线路径计算

Helpers.js - 通用辅助函数

  • generateMapId(nextId): 生成地图ID
  • hexToRgb(hex): 十六进制转RGB
  • rgbToString(rgb): RGB数组转字符串
  • coordToKey(row, col): 坐标转键
  • deepClone(obj): 深拷贝
  • throttle(func, delay): 节流函数
  • debounce(func, delay): 防抖函数

Storage.js - 数据持久化

  • saveMapData(mapName, mapData): 保存地图数据
  • loadMapData(mapName): 加载地图数据
  • saveProgress(mapName, progressState): 保存进度
  • loadProgress(mapName): 加载进度
  • 完整的 localStorage 封装

History.js - 编辑历史管理

  • add(gridData, colorMap): 添加历史记录
  • undo(): 撤销
  • redo(): 重做
  • 支持最多 50 步历史记录

特效模块 (effects/)

ParticleSystem.js - 粒子背景系统

  • 动态粒子背景效果
  • 鼠标交互支持
  • 自动适配窗口大小
graph LR
    Main["main.js<br/>应用启动与协调"] --> Alg["Algorithms.js<br/>路径生成"]
    Main --> Help["Helpers.js<br/>工具函数"]
    Main --> Stor["Storage.js<br/>localStorage"]
    Main --> Hist["History.js<br/>50步撤销"]
    Main --> PS["ParticleSystem.js<br/>粒子背景"]
    Hist --> Stor
    Alg --> Help

架构优势

模块化架构带来的优势

  1. 可维护性提升
    • 代码结构清晰,易于理解
    • 每个模块职责明确,修改影响范围小
    • 便于代码审查和调试
  2. 可扩展性增强
    • 新功能可以独立模块形式添加
    • 不影响现有功能
    • 支持插件化扩展
  3. 可测试性改善
    • 每个模块可以独立测试
    • 便于单元测试和集成测试
    • 降低测试复杂度
  4. 团队协作优化
    • 不同开发者可以并行开发不同模块
    • 减少代码冲突
    • 提高开发效率

三栏布局设计

布局优化

v2.0 版本将原有的两栏布局升级为三栏布局,解决了右侧悬浮控制面板可能遮挡内容的问题。

三栏布局结构

  • 左侧栏:地图列表(320px)
  • 中间栏:主网格区域(自适应,1fr)
  • 右侧栏:控制面板(280px)

布局特点

  • 使用 CSS Grid 布局,响应式设计
  • 三栏等间距,视觉平衡
  • 支持不同屏幕尺寸的自适应调整

响应式适配

不同屏幕尺寸的布局调整

  • 大屏幕(>1400px):完整三栏布局 320px 1fr 280px
  • 中等屏幕(1200px-1400px):调整列宽 280px 1fr 260px
  • 小屏幕(968px-1200px):进一步缩小 260px 1fr 240px
  • 移动端(<968px):单栏布局(堆叠显示)
graph LR
    Large["> 1400px<br/>320px 1fr 280px"] --> Medium["1200-1400px<br/>280px 1fr 260px"]
    Medium --> Small["968-1200px<br/>260px 1fr 240px"]
    Small --> Mobile["< 968px<br/>单栏堆叠"]

侧边栏显示/隐藏功能

专注模式

v2.0 版本新增了侧边栏显示/隐藏功能,让用户可以根据需要隐藏左右侧边栏,专注于当前任务。

功能特点

  • 一键切换:点击主网格区域边缘的切换按钮即可显示/隐藏侧边栏
  • 状态记忆:用户的显示/隐藏偏好会自动保存到 localStorage
  • 平滑过渡:显示/隐藏有 0.3s 的过渡动画
  • 图标反馈:侧边栏隐藏时按钮图标会旋转 180 度

使用场景

  • 编辑大型地图时,隐藏侧边栏获得更多工作空间
  • 查看地图细节时,隐藏控制面板减少干扰
  • 专注编织时,隐藏地图列表专注于当前地图

智能视图放大

当两侧边栏都隐藏时,中间视图会自动放大:

  • 内容区域扩大:最大宽度从 1400px 增加到 1800px
  • 内边距增加:主网格区域内边距从 2rem 增加到 2.5rem
  • 画布优化:画布能够充分利用可用空间
  • 平滑过渡:宽度变化有平滑的过渡动画

悬浮Mini菜单

可拖动快捷菜单

当右侧栏隐藏时,会自动显示一个悬浮的 mini 菜单,保留所有关键功能。

功能特点

  • 可拖动:点击标题栏可以拖动到任意位置
  • 位置记忆:拖动位置保存到 localStorage
  • 展开/收起:可以折叠/展开菜单内容
  • 功能完整:包含所有关键操作按钮
  • 状态同步:与主控制面板状态实时同步

Mini菜单包含的功能

浏览模式

  • 进入对角预设模式
  • 上一条/下一条导航
  • 保存/加载/重置进度
  • 进度条显示

编辑模式

  • 撤销/重做
  • 保存地图
  • 当前颜色预览

拖动功能

拖动特性

  • 鼠标拖动:支持鼠标点击拖动
  • 触摸拖动:支持移动设备触摸拖动
  • 边界限制:自动限制在视口内
  • 平滑移动:拖动过程流畅自然

智能导航系统

导航链接修复

v2.0 版本添加了智能导航链接系统,确保在不同环境下都能正确跳转。

智能路径检测

  • GitHub Pages 环境:使用绝对路径(//blog 等)
  • 本地文件环境:使用相对路径(../../ 等)
  • 其他环境:自动检测并设置合适的路径

导航链接

  • 首页:返回站点主页
  • 博客:跳转到博客列表
  • 简历:查看个人简历
  • 关于:关于页面
  • 应用:返回应用列表

技术实现细节

模块化实现

ES6 模块化

// 导入工具类
import { Algorithms } from './utils/Algorithms.js';
import { Helpers } from './utils/Helpers.js';
import { Storage } from './utils/Storage.js';
import { History } from './utils/History.js';

// 导入特效
import { ParticleSystem } from './effects/ParticleSystem.js';

模块导出

// 导出工具类供其他模块使用
window.PixelKnit = {
    Algorithms,
    Helpers,
    Storage,
    History
};

状态管理

localStorage 状态保存

  • 侧边栏显示/隐藏状态
  • Mini菜单位置
  • 用户地图列表
  • 编织进度
  • 下一个地图ID

性能优化

保持的性能优化

  • 离屏Canvas缓存
  • 事件节流
  • DOM元素缓存
  • 批量更新操作

用户体验改进

视觉优化

三栏布局

  • 更好的空间利用
  • 减少内容遮挡
  • 视觉平衡

侧边栏切换

  • 平滑的过渡动画
  • 清晰的视觉反馈
  • 直观的操作方式

Mini菜单

  • 紧凑的设计
  • 玻璃态效果
  • 渐变按钮

交互优化

专注模式

  • 一键隐藏侧边栏
  • 自动扩大工作区域
  • 状态自动保存

Mini菜单

  • 可拖动到任意位置
  • 展开/收起功能
  • 功能完整保留

版本对比

v1.1 vs v2.0

特性 v1.1 v2.0
代码结构 单体应用(3000+行) 模块化架构(多文件)
布局设计 两栏布局 三栏布局
侧边栏 固定显示 可显示/隐藏
Mini菜单 悬浮可拖动
视图放大 自动放大
导航链接 固定路径 智能适配
可维护性 中等
可扩展性 中等

未来规划

计划中的功能

  1. 完整模块化迁移
    • 将所有功能迁移到模块化结构
    • 实现核心模块和UI组件
    • 完善模块间通信
  2. 构建系统
    • 引入 Webpack 或 Vite
    • 代码分割和懒加载
    • 生产环境优化
  3. 类型系统
    • 考虑引入 TypeScript
    • 类型安全和代码提示
    • 更好的开发体验
  4. 测试覆盖
    • 单元测试
    • 集成测试
    • 端到端测试
  5. 性能优化
    • 进一步优化渲染性能
    • 减少内存占用
    • 提升加载速度

使用指南

侧边栏显示/隐藏

  1. 隐藏左侧栏:点击主网格区域左上角的 按钮
  2. 隐藏右侧栏:点击主网格区域右上角的 按钮
  3. 显示侧边栏:再次点击对应按钮即可显示
  4. 状态记忆:显示/隐藏偏好会自动保存

Mini菜单使用

  1. 拖动菜单:点击并拖动标题栏(”快捷操作”区域)
  2. 展开/收起:点击标题栏右侧的 按钮
  3. 使用功能:点击 mini 菜单中的按钮,功能与原始按钮相同
  4. 位置记忆:拖动位置会自动保存

专注模式

  1. 隐藏两侧边栏:分别点击左右切换按钮
  2. 自动放大:中间视图会自动扩大
  3. 恢复布局:再次点击切换按钮恢复

技术栈

v2.0 版本技术栈

  • 前端: HTML5, CSS3, JavaScript (ES6+)
  • 模块化: ES6 Modules
  • Canvas API: 用于网格渲染和交互
  • localStorage: 客户端数据持久化
  • Bresenham 算法: 直线路径计算
  • CSS Grid: 三栏布局系统
  • CSS Transitions: 平滑动画效果

项目信息

项目地址GitHub Repository

在线体验像素织梦 (PixelKnit) v2.0

技术栈:HTML5, CSS3, JavaScript (ES6+), ES6 Modules, Canvas API, localStorage

相关文章


总结

像素织梦 (PixelKnit) v2.0 是一次全面的架构重构和用户体验升级。通过模块化架构,我们为应用的长期发展奠定了坚实的基础;通过三栏布局和侧边栏显示/隐藏功能,我们提升了用户的工作效率;通过悬浮mini菜单,我们确保了功能的完整性和便捷性。

这次更新不仅提升了代码质量,更重要的是改善了用户体验。我们相信,这些改进将让 PixelKnit 成为一个更加专业、易用的编织引导应用。

感谢使用像素织梦 (PixelKnit)!祝编织愉快!🧶✨


更新日期:2025-12-03

版本:v2.0.0

主要更新

  • ✅ 模块化架构重构
  • ✅ 三栏布局设计
  • ✅ 侧边栏显示/隐藏
  • ✅ 悬浮mini菜单
  • ✅ 智能视图放大
  • ✅ 智能导航链接
文章目录