这是一个现代化、功能丰富的个人博客网站项目,采用Vue 3 + TypeScript技术栈构建。该项目集成了文章系统、音乐播放器、相册展示等多种功能,具有出色的动画效果和用户体验。
- Vue 3 + TypeScript: 提供更强大的类型安全和开发体验
- Pinia: 轻量级状态管理,替代Vuex
- Vue Router 4: 动态路由管理
- Vite: 快速的构建工具,热更新体验极佳
- ESLint + Prettier: 统一代码风格和质量保证
- 组件化设计: 页面、功能模块高度组件化,易于维护和扩展
- 标准化路由结构: 清晰的路由配置,支持嵌套路由
- 统一状态管理: 使用Pinia进行全局状态管理,数据流清晰
- 可复用UI组件: 如标签云、音乐播放器等,提高开发效率
- 文章自动生成:
npm run generate-articles扫描Markdown文件并生成索引 - 相册自动生成:
npm run generate-albums自动扫描图片文件夹并生成相册列表 - 音乐库自动生成:
npm run generate-songs自动扫描音频文件并生成播放列表 - 图片批量重命名:
npx tsx scripts/RenamePhotos.ts提供交互式图片重命名工具,采用插入式重命名,防止删除后出现滚动黑屏、重命名覆盖丢失后侧所有照片等情况。

- 多动画页面: 包含多个精心设计的动画页面,提供丰富视觉体验
- 物理引擎: 相册详情页使用物理模拟,图片有动态飘浮效果
- 过渡动画: 页面切换、元素出现都有平滑过渡效果
- 粒子效果: 使用Canvas Confetti实现庆祝动画效果
- 悬停交互: 大量悬停效果增强用户交互体验
- Markdown支持: 支持Front Matter格式的Markdown文章
- 元数据管理: 标题、日期、分类、标签等结构化数据
- 标签云: 可视化标签展示,方便内容检索
- 文章搜索: 按分类、标签筛选文章
- 全站播放器: 悬浮播放器,跨页面播放
- 播放列表管理: 支持播放、暂停、上一首、下一首
- 音量控制: 实时音量调节
- 进度控制: 可拖拽进度条
- 音乐分类: 按类型分类播放
- 封面展示: 精美的专辑封面展示
- 胶片式浏览: 独特的水平滚动胶片效果
- 物理动画: 相册详情页的图片物理运动效果
- 响应式布局: 适配不同屏幕尺寸
- 懒加载优化: 图片懒加载提升性能
- 移动端适配: 完美适配手机、平板、桌面设备
- 触摸友好: 触摸设备上的良好交互体验
- 灵活布局: 使用Flexbox和Grid实现灵活布局
- TypeScript支持: 提供完整的类型定义
- 模块化配置: 清晰的配置文件结构
- 开发服务器: Vite提供的快速热重载开发环境
- 构建优化: 生产环境代码压缩和优化
- Node.js ^20.19.0 或 >=22.12.0
- npm 或 pnpm
# 克隆项目
git clone <repository-url>
# 进入项目目录
cd PersonalWeb
# 安装依赖
npm install
# 启动开发服务器
npm run dev# 构建项目
npm run build
# 预览生产版本
npm run previewsrc/ ├── component/ # Vue组件
│ ├── Main/ # 主界面组件
│ ├── Pages/ # 页面组件(文章、音乐、相册等)
│ └── welcome/ # 欢迎页面组件
├── router/ # 路由配置
├── stores/ # Pinia状态管理
├── service/ # 业务服务层
├── main.ts # 应用入口
└── App.vue # 根组件
public/ ├── article/ # 文章Markdown文件
├── album/ # 相册图片
├── music/ # 音频文件
└── images/ # 其他图片资源
scripts/ # 自动化脚本
├── generate-articles-json.ts # 生成文章索引
├── generate-albums-json.ts # 生成相册索引
├── generate-songs-json.ts # 生成音乐索引
└── RenamePhotos.ts # 图片重命名工具
- 在
public/article/目录下创建.md文件 - 文件命名规则:任意,如
my-article.md - 在文件顶部添加 Front Matter 元数据:
---
title: 文章标题
date: 2024-12-18
category: 文章分类
tags: [标签1, 标签2, 标签3]
description: 文章描述
---
# 正文内容- 重新生成文章索引:
npm run generate-articles- 在
public/album/目录下创建相册文件夹 - 将图片放入文件夹(推荐使用脚本重命名)
- 可选:创建
album_config.md配置文件设置标题、日期等 - 重新生成相册索引:
npm run generate-albums- 在
public/music/目录下放入音频文件 - 同时放入对应的封面图片
- 重新生成音乐索引:
npm run generate-songsnpm run generate-articles
# 或
npx tsx scripts/generate-articles-json.tsnpm run generate-albums
# 或
npx tsx scripts/generate-albums-json.tsnpm run generate-songs
# 或
npx tsx scripts/generate-songs-json.tsnpx tsx scripts/RenamePhotos.ts- 玻璃拟态设计: 大量使用backdrop-filter实现毛玻璃效果
- 渐变色彩: 精心设计的渐变背景
- 光影效果: 微妙的阴影和发光效果
- 动态交互: 丰富的鼠标悬停和点击反馈
- 流畅动画: 所有交互都有平滑的动画过渡
- 直观导航: 清晰的导航结构和面包屑
- 内容组织: 合理的信息层级和视觉引导
- 无障碍设计: 考虑可访问性的设计
构建完成后,dist 目录包含所有静态资源,可部署到任何支持静态文件托管的服务:
- GitHub Pages
- Netlify
- Vercel
- 传统Web服务器
欢迎提交Issue和Pull Request来改进这个项目!
此项目仅供学习和参考使用。
项目技术栈:Vue 3 + TypeScript + Vite + Pinia + Vue Router
Built with ❤️ for developers and content creators