个人博客前端 · 随记 / 技术笔记 / 一些顺手的小工具
Levi Blog 是我个人独立开发并长期自用的一套博客前端(Vue 3 + Vite)。主要用来写文章、整理笔记、放一些自己经常用的小工具。UI 走深色系 + 青色点缀的路线,支持明暗主题切换,也做了按时间自动切换的开关。布局偏响应式,桌面和手机都能用,但仍以我自己日常使用场景为主。
| ⭐ 组件总数 |
约 101 个 Vue 单文件组件(会随迭代变化) |
| 📄 页面路由 |
约 28 条(文章分类 / 工具箱 / 独立页面) |
| 🧰 工具模块 |
12 个 utils + 10 个 api 模块 |
| 🎨 主题系统 |
明暗切换 + 可选按时自动切换 |
| 📦 包管理 |
Yarn · 依赖数量保持可控 |
- 深色底 + 青色强调,整体尽量克制
- 明暗主题切换,偏好会被记住
- 可选按时间自动切换(默认 18:00-08:00 暗色)
- 常用组件样式随主题联动
- 部分页面有入场动画,避免过度花哨
|
- Canvas 实时渲染:代码雨 / 粒子连线 / 星空 / 浮尘
- 提供简单面板调参:密度 / 速度 / 强度 / 颜色(实时预览)
- 底色与特效可叠加,按喜好组合
- 特效可全局使用,也可随时关闭
|
- 一只 Lottie 猫咪:可拖动、可点击互动
- 长按会“睡觉”,偶尔有随机动作
- 视线跟随鼠标、点击有反馈
- 更多是氛围功能,不想要也能关
|
- 加密解密(AES / DES / MD5 / RC4 / Rabbit / 3DES / Base64)
- 图片处理(压缩 / 裁剪 / 格式转换 / EXIF)
- 密码生成器 / 单位换算 / 二维码生成
- 样式尽量统一,交互不追求“炫”,主要图好用
|
| 类别 |
技术选型 |
说明 |
| 框架 |
Vue 3.3 + Composition API |
主要开发方式 |
| 构建 |
Vite 3.0 |
本地开发 / 打包 |
| 路由 |
Vue Router 4 |
页面路由 |
| 状态 |
Pinia 3 + 持久化插件 |
全局状态 + 本地持久化 |
| HTTP |
Axios |
请求层基础 |
| 样式 |
Sass + Bootstrap Icons |
样式与图标 |
| Markdown |
md-editor-v3 + Prism.js |
Markdown 编辑 / 高亮 |
| 图片 |
Compressor.js + Cropper.js + ExifReader |
压缩 / 裁剪 / 元数据 |
| 加密 |
Crypto-JS |
浏览器端加解密 |
| 动画 |
Lottie Web + Hammer.js |
动画与拖拽等交互 |
| 特效 |
Canvas + requestAnimationFrame |
背景特效 |
| 自动导入 |
unplugin 系列 |
组件 / API / 图标自动导入 |
Levi-Blog/
├── public/ # 静态资源(不经过构建处理)
├── src/
│ ├── api/ # 🔌 API 接口层(10 个模块)
│ │ ├── articles.js # 文章接口
│ │ ├── comments.js # 评论接口
│ │ ├── messages.js # 留言接口
│ │ ├── links.js # 友链接口
│ │ └── ...
│ ├── assets/ # 🎨 静态资源(字体 / 图标 / 图片)
│ ├── components/ # 🧩 通用组件库
│ │ ├── MarkdownRenderer # Markdown 渲染器
│ │ ├── ImagePreview # 图片预览
│ │ ├── SwitchWallpaper # 背景特效/主题设置面板
│ │ ├── MatrixRain # Canvas 代码雨特效
│ │ ├── ParticleNetwork # Canvas 粒子连线特效
│ │ ├── StarField # Canvas 星空特效
│ │ ├── DustParticles # Canvas 浮尘特效
│ │ ├── CatPet # 互动猫咪
│ │ ├── ArticleSkeleton # 骨架屏
│ │ ├── FloatToolBar # 悬浮工具栏(主题/特效切换)
│ │ └── ...
│ ├── directives/ # 📌 自定义指令(vSlidIn 等)
│ ├── hooks/ # 🪝 组合式函数(useTheme / useGetData)
│ ├── layout/ # 🏗 布局组件(Header / Footer / 导航抽屉)
│ ├── router/ # 🧭 路由配置(28 条路由)
│ ├── stores/ # 📦 Pinia 状态仓库(含特效配置)
│ ├── styles/ # 🎭 全局样式(base / element / md)
│ ├── utils/ # 🔧 工具函数(12 个模块)
│ │ ├── request.js # Axios 封装
│ │ ├── storage.js # localStorage 封装
│ │ ├── vSlidIn.js # 元素滑入指令
│ │ └── ...
│ ├── views/ # 📄 页面视图
│ │ ├── Home/ # 首页(分屏 Hero + 终端窗口)
│ │ ├── Topic/ # 文章分类(日记 / 技术 / 萌宠 / 光影 / 笔记)
│ │ ├── Tools/ # 工具箱(加解密 / 换算 / 图片等)
│ │ ├── About/ # 关于我 / 作品集 / 联系
│ │ ├── MessageBoard/ # 留言板
│ │ ├── Links/ # 友情链接
│ │ ├── Nav/ # 常用网站导航
│ │ └── Material/ # 前端资料
│ ├── App.vue # 根组件(开门动画 / 主题初始化)
│ └── main.js # 入口文件
├── vite.config.js # Vite 构建配置
├── package.json # 项目依赖
└── LICENSE # MIT 开源协议
- Node.js >= 16
- Yarn >= 1.22
# 克隆仓库
git clone https://github.com/LeviQin/Levi-Blog.git
cd Levi-Blog
# 安装依赖
yarn install
# 启动开发服务器(localhost:9527)
yarn dev
# 构建生产版本
yarn build
# 预览构建结果
yarn preview
| 功能 |
说明 |
| 明暗切换 |
悬浮工具栏月亮/太阳按钮,偏好持久化 |
| 按时自动切换 |
18:00-08:00 自动暗色,其余亮色(可关闭) |
| 首页 Hero |
分屏布局:终端风格标题 + 代码窗口 |
点击右下角悬浮工具栏的星星图标,可打开特效设置面板:
- 4 种 Canvas 特效:代码雨 / 粒子连线 / 星空 / 浮尘
- 可调参数:密度、速度、强度、颜色(5 档预设)
- 实时预览:面板内直接看到当前特效效果
- 底色搭配:多套配色光晕 + 特效叠加
生产构建里做了一些偏“实用主义”的处理,主要目标是减少体积、让首屏更轻一点:
| 优化项 |
策略 |
| 代码压缩 |
esbuild minify,速度远快于 terser |
| CSS 处理 |
所有 CSS 合并为单一文件 |
| 图片优化 |
vite-plugin-imagemin 自动转 WebP,质量 60% |
| Chunk 分割 |
组件级代码分割,按需加载 |
| Source Map |
生产环境关闭,减小体积 |
| 静态资源 |
带 hash 的文件名,长效缓存 |
| 构建清单 |
生成 manifest.json,便于服务端集成 |
| 特效性能 |
Canvas 限制 DPR ≤ 2,页面隐藏自动暂停动画 |
如果你在使用中发现问题,或者有更顺手的实现方式,欢迎提 Issue / PR:
- Fork 本仓库
- 创建你的特性分支:
git checkout -b feature/amazing-feature
- 提交你的更改:
git commit -m 'feat: add amazing feature'
- 推送到分支:
git push origin feature/amazing-feature
- 发起 Pull Request
本项目基于 MIT License 开源,你可以自由地使用、修改和分发。
如果这个项目对你有帮助,请给一个 ⭐️ 吧!