一、项目背景与立项动机

故事的开始

那是一个春寒料峭的夜晚,我和女友视频聊天时,她突然说:"你知道吗?还有不到三个月就是我们在一起 2 周年了。"

我们是一对异地恋情侣,分隔在两个城市已经一年零九个月。虽然每天都会视频聊天,但距离的隔阂总是让一些情感无法完全传递。

"时间过得真快,感觉我们好像昨天才认识一样。" 女友的一句话,像一颗种子,在我心里发了芽。

立项动机

  • 情感连接:跨越距离的障碍,创造一个只属于我们的虚拟空间
  • 惊喜准备:为5月5日的2周年纪念日准备一个特别的礼物
  • 技术实践:作为前端开发者,挑战纯前端实现完整应用
  • 数据隐私:珍贵的回忆只属于我们,不依赖第三方平台
  • 长期价值:不仅是礼物,更是未来持续记录回忆的平台

秘密计划

我决定偷偷地开始这个项目,计划在 5 月 5 日我们相恋两周年的那天,给她一个大大的惊喜。从那天起,每天下班后,我都会躲在房间里,对着电脑敲代码,像一个正在准备神秘礼物的工匠。

现在,我正在倒计时——距离 5 月 5 日还有 XX 天。

二、详细的需求分析过程

功能需求梳理

基于项目的实际功能,我整理了以下需求:

功能模块 核心需求 情感价值
时间轴 添加、编辑、删除节点,支持照片上传,标记里程碑 记录异地恋中的重要时刻,让回忆有迹可循
照片墙 本地图片上传,编辑照片信息,点击预览大图 睹物思人,照片是连接思念的桥梁
纪念日 添加多种类型纪念日,自动计算倒计时,标记已过纪念日 期待与惊喜的源泉,让等待变得有意义
爱情故事 创建故事集,管理章节,编辑和删除内容 用文字记录异地恋的酸甜苦辣
爱情宣言 添加宣言内容,按分类展示,编辑和删除 表达爱意的直接方式,让对方感受到在乎
时间计算 多种时间显示模式(按年月日、按天、按年日),实时更新 见证爱情的成长,计算重逢的喜悦

技术需求梳理

  • 纯前端实现:不依赖后端服务器,使用HTML5、CSS3、JavaScript
  • 本地数据存储:使用localStorage持久化存储数据
  • 响应式设计:适配移动设备和桌面设备
  • 图片处理:使用FileReader API处理本地图片上传
  • 用户体验:添加平滑动画和过渡效果,优化触摸交互

秘密数据收集

为了让网站更有意义,我开始秘密收集我们的回忆:

  • 整理手机里的所有合照,从第一次见面到最近一次分别
  • 记录所有重要的日期,包括相识日、第一次约会、每个月的纪念日
  • 回忆我们之间的小故事,准备写成爱情故事
  • 整理想对她说的话,准备添加到爱情宣言中

三、技术栈选型依据与考量

技术选型

  • HTML5:构建页面结构,使用语义化标签
  • CSS3:实现样式设计,包括响应式布局和动画效果
  • JavaScript (ES6+):实现交互逻辑和功能模块
  • localStorage:本地数据存储,持久化保存所有数据
  • FileReader API:处理本地图片上传和预览

技术栈选型图

graph LR subgraph 前端技术 HTML5[HTML5\n页面结构] CSS3[CSS3\n样式设计] JS[JavaScript\n交互逻辑] end subgraph 浏览器API LS[localStorage\n本地存储] FR[FileReader API\n文件读取] DOM[DOM API\n文档操作] end subgraph 项目特性 RWD[响应式设计] SPA[单页应用] Offline[离线使用] end HTML5 --> RWD CSS3 --> RWD JS --> SPA JS --> Offline LS --> Offline LS --> SPA FR --> SPA DOM --> SPA classDef frontend fill:#f9f,stroke:#333,stroke-width:2px classDef api fill:#bbf,stroke:#333,stroke-width:2px classDef feature fill:#bfb,stroke:#333,stroke-width:2px class HTML5,CSS3,JS frontend class LS,FR,DOM api class RWD,SPA,Offline feature

图 2:技术栈选型图 - 展示了爱情纪念网站使用的技术栈及其关系。前端技术(HTML5、CSS3、JavaScript)与浏览器 API(localStorage、FileReader API、DOM API)共同支持项目的核心特性,包括响应式设计、单页应用和离线使用能力。

选型考量

为什么选择这些技术?让我用项目的实际需求来解释:

  • 纯前端技术:满足数据隐私需求,所有数据存储在本地,不依赖外部服务器
  • localStorage:适合存储我们的回忆数据,虽然有5MB的限制,但通过优化可以满足需求
  • 响应式设计:确保女友无论是用手机还是电脑,都能完美浏览网站
  • FileReader API:支持本地图片上传,不需要后端服务器处理
  • 原生JavaScript:轻量高效,加载速度快,适合作为惊喜礼物

技术架构

项目采用模块化的 JavaScript 架构,将功能划分为多个独立模块:

  • DataStorage:处理本地数据存储
  • TimeCalculator:处理时间计算和显示
  • timelineModule:处理时间轴功能
  • photoWallModule:处理照片墙功能
  • anniversaryModule:处理纪念日功能
  • storyModule:处理爱情故事功能
  • declarationModule:处理爱情宣言功能

项目架构图

graph TD subgraph 用户界面层 UI[用户界面] end subgraph 模块层 TM[timelineModule\n时间轴模块] PTM[photoWallModule\n照片墙模块] AM[anniversaryModule\n纪念日模块] SM[storyModule\n爱情故事模块] DM[declarationModule\n爱情宣言模块] TC[TimeCalculator\n时间计算模块] end subgraph 数据层 DS[DataStorage\n数据存储模块] LS[localStorage\n本地存储] end UI --> TM UI --> PTM UI --> AM UI --> SM UI --> DM UI --> TC TM --> DS PTM --> DS AM --> DS SM --> DS DM --> DS TC --> DS DS --> LS LS --> DS classDef ui fill:#f9f,stroke:#333,stroke-width:2px classDef module fill:#bbf,stroke:#333,stroke-width:2px classDef data fill:#bfb,stroke:#333,stroke-width:2px class UI ui class TM,PTM,AM,SM,DM,TC module class DS,LS data

图 1:项目架构图 - 展示了爱情纪念网站的三层架构设计,包括用户界面层、模块层和数据层。模块层的各个功能模块通过 DataStorage 模块与本地存储进行交互,实现数据的持久化存储。

四、开发实现中的关键技术挑战及解决方案

核心功能模块

核心功能模块图

graph TD subgraph 核心功能模块 TM[timelineModule\n时间轴模块] PTM[photoWallModule\n照片墙模块] AM[anniversaryModule\n纪念日模块] SM[storyModule\n爱情故事模块] DM[declarationModule\n爱情宣言模块] TC[TimeCalculator\n时间计算模块] end subgraph 功能特性 TM1[添加/编辑/删除节点] TM2[照片上传] TM3[里程碑标记] PTM1[本地图片上传] PTM2[照片管理] PTM3[大图预览] AM1[多种纪念日类型] AM2[自动倒计时] AM3[已过纪念日标记] SM1[创建故事集] SM2[章节管理] SM3[故事阅读] DM1[添加宣言] DM2[分类展示] DM3[编辑删除] TC1[多种时间显示模式] TC2[实时更新] TC3[里程碑切换] end TM --> TM1 TM --> TM2 TM --> TM3 PTM --> PTM1 PTM --> PTM2 PTM --> PTM3 AM --> AM1 AM --> AM2 AM --> AM3 SM --> SM1 SM --> SM2 SM --> SM3 DM --> DM1 DM --> DM2 DM --> DM3 TC --> TC1 TC --> TC2 TC --> TC3 classDef module fill:#f9f,stroke:#333,stroke-width:2px classDef feature fill:#bbf,stroke:#333,stroke-width:2px class TM,PTM,AM,SM,DM,TC module class TM1,TM2,TM3,PTM1,PTM2,PTM3,AM1,AM2,AM3,SM1,SM2,SM3,DM1,DM2,DM3,TC1,TC2,TC3 feature

图 4:核心功能模块图 - 展示了爱情纪念网站的六大核心功能模块及其详细功能特性,包括时间轴、照片墙、纪念日、爱情故事、爱情宣言和时间计算模块。

挑战1:localStorage存储限制

问题:localStorage 的存储容量有限(通常为 5MB),而我们有很多珍贵的照片。

解决方案

  • 实现图片压缩功能,在上传时自动调整图片大小
  • 优化数据结构,减少冗余字段,最大化利用存储空间
  • 使用Base64编码存储图片,确保数据完整性

实际操作
我在代码中添加了图片压缩逻辑,将上传的图片限制在合理大小,同时保证视觉效果。这样既节省了存储空间,又提高了页面加载速度。

挑战2:时间计算的精度

问题:如何准确计算时间差,避免时区和夏令时的影响。

解决方案

  • 使用Date对象的getTime()方法获取时间戳,避免时区问题
  • 实现多种时间显示模式,满足不同场景的需求
  • 优化时间更新逻辑,确保实时性的同时减少性能消耗

实际操作
我在 TimeCalculator 模块中实现了三种时间显示模式,并添加了实时更新功能,确保时间计算的准确性和显示的美观性。

挑战3:响应式布局的实现

问题:如何让网站在不同设备上都能完美显示。

解决方案

  • 使用CSS Grid和Flexbox实现弹性布局
  • 添加媒体查询,针对不同屏幕尺寸调整样式
  • 优化触摸交互,提高移动设备体验

实际操作
我在 CSS 中添加了响应式设计,确保网站在手机、平板和桌面设备上都能完美显示,特别是照片墙的网格布局,在不同屏幕尺寸下都能保持美观。

挑战4:秘密开发的时间管理

问题:如何在不被女友发现的情况下,合理安排开发时间。

解决方案

  • 制定详细的开发计划,分解任务,确保在5月5日前完成
  • 利用下班后的时间开发,避免占用和女友视频的时间
  • 建立代码备份,确保数据安全
  • 创造合理的借口,避免女友起疑心

实际操作
我制定了详细的开发计划,每天完成一个小任务,确保项目稳步推进。同时,我会在和女友视频时,把代码编辑器最小化,切换到工作文档,避免露馅。

挑战5:用户体验的优化

问题:如何让网站的交互更流畅、更有吸引力。

解决方案

  • 添加平滑的过渡动画和转场效果
  • 实现键盘导航,支持键盘操作
  • 添加加载状态和错误处理
  • 优化表单交互,提供即时反馈

实际操作
我在照片预览功能中添加了平滑的过渡动画,在时间计算中添加了实时更新效果,让整个网站的交互更加流畅和有吸引力。

五、测试策略与部署计划

测试策略

  1. 功能测试:逐个测试每个功能模块,确保所有功能正常工作
  2. 兼容性测试:在女友使用的手机浏览器中反复测试
  3. 响应式测试:确保在不同屏幕尺寸下都能完美显示
  4. 性能测试:测试页面加载速度和交互流畅度
  5. 数据测试:测试数据存储和读取的稳定性

开发流程图

graph TD A[需求分析\n情感+技术] B[技术选型\n纯前端方案] C[架构设计\n模块化架构] D[核心功能开发\n六大模块] E[技术挑战解决\n存储+时间+响应式] F[测试优化\n兼容性+性能] G[数据填充\n回忆收集] H[部署准备\n云存储链接] I[5月5日\n惊喜发布] A --> B B --> C C --> D D --> E E --> F F --> G G --> H H --> I subgraph 开发阶段 A B C D E F end subgraph 准备阶段 G H end subgraph 发布阶段 I end classDef dev fill:#f9f,stroke:#333,stroke-width:2px classDef prep fill:#bbf,stroke:#333,stroke-width:2px classDef pub fill:#bfb,stroke:#333,stroke-width:2px class A,B,C,D,E,F dev class G,H prep class I pub

图 3:开发流程图 - 展示了爱情纪念网站从需求分析到 5 月 5 日惊喜发布的完整开发流程,包括开发阶段、准备阶段和发布阶段的各个关键步骤。

测试工具

  • Chrome DevTools:调试JavaScript和CSS
  • Responsive Design Mode:模拟女友的手机屏幕
  • Lighthouse:分析性能和可访问性
  • 手动测试:无数次地打开网站,测试所有功能

部署计划

  1. 代码优化:在4月底前完成所有代码优化和bug修复
  2. 数据填充:整理所有照片和回忆,填充到网站中
  3. 最终测试:进行全面的功能测试和性能测试
  4. 部署方式
    • 生成最终的HTML文件,确保所有功能正常
    • 上传到云存储服务,生成一个唯一的访问链接
    • 备份所有数据,确保安全
  5. 时机选择:5月5日当天,在我们视频聊天时,突然发给她

六、项目进展与未来期待

目前进展

  • 核心功能开发:已完成时间轴、照片墙、纪念日、爱情故事、爱情宣言等所有核心功能
  • 数据结构优化:已实现localStorage数据的高效存储和管理
  • 响应式设计:已完成在不同设备上的适配
  • 用户体验优化:已添加平滑动画和过渡效果
  • 数据收集:正在整理和上传我们的照片和回忆

项目时间线图

gantt title 爱情纪念网站项目时间线 dateFormat YYYY-MM-DD section 开发阶段 需求分析 :active, des1, 2026-02-01, 7d 技术选型与架构设计 :des2, after des1, 5d 核心功能开发 :des3, after des2, 20d 技术挑战解决 :des4, after des3, 10d 测试优化 :des5, after des4, 10d section 准备阶段 数据填充与整理 :prep1, after des5, 15d 部署准备与测试 :prep2, after prep1, 5d section 发布阶段 5月5日 2周年惊喜发布 :pub1, 2026-05-05, 1d section 里程碑 项目启动 :milestone, m1, 2026-02-01, 0d 核心功能完成 :milestone, m2, 2026-03-05, 0d 测试完成 :milestone, m3, 2026-03-25, 0d 数据准备完成 :milestone, m4, 2026-04-10, 0d 部署准备完成 :milestone, m5, 2026-04-15, 0d 惊喜发布 :milestone, m6, 2026-05-05, 0d

图 5:项目时间线图 - 展示了爱情纪念网站从 2 月到 5 月 5 日的详细项目时间线,包括开发、准备和发布三个阶段的里程碑。

对5月5日的期待

那一天,我会提前准备好一切,然后在视频聊天时,神秘地对她说:"宝贝,我为你准备了一个特别的 2 周年礼物。"

当她打开链接,看到那个充满我们回忆的网站时,我想象她会:

  • 看到时间轴上的第一个节点——我们第一次见面的那天
  • 浏览照片墙上的合照,回忆起每一次见面的场景
  • 看到纪念日模块中我们的重要日期
  • 读到我为她写的爱情故事
  • 看到爱情宣言中我对她的表白
  • 发现时间计算器显示"我们已经在一起730天"

那一刻,距离将不再是障碍,我们的情感会通过这个网站紧紧连接在一起。

长期价值

这个网站不仅是 2 周年的礼物,更是我们未来持续记录回忆的平台。以后,我们可以:

  • 继续在时间轴上添加新的回忆
  • 在照片墙上传新的合照
  • 在纪念日模块添加新的重要日期
  • 续写我们的爱情故事
  • 添加新的爱情宣言
  • 看着时间计算器的数字不断增长

七、网站界面预览

1. 时间轴页面

描述:记录重要时刻的时间轴页面,包含时间计算和重要时刻节点。

功能

  • 时间轴节点的添加、编辑、删除
  • 节点照片的上传和展示
  • 里程碑标记
  • 时间轴的滚动浏览
  • 多种时间显示模式切换

布局

  • 顶部时间计算卡片,显示在一起的时间
  • 左侧时间线,右侧节点内容
  • 每个节点包含标题、日期、描述和照片
  • 节点的渐入动画效果

特色

  • 实时更新的时间计算器
  • 平滑的节点动画效果
  • 响应式设计,适配不同设备

时间轴

图 6:时间轴页面 - 展示了时间计算卡片和重要时刻节点,显示了相识至今的时间和第一个节点 "初识"。

2. 照片墙页面

描述:展示照片的网格布局页面,支持照片的上传和管理。

功能

  • 照片的上传、编辑和删除
  • 点击照片查看大图预览
  • 响应式网格布局
  • 照片信息的编辑

布局

  • 自适应网格,根据屏幕尺寸调整列数
  • 每张照片带有标题和日期
  • 悬停效果显示操作按钮
  • 上传照片按钮

特色

  • 响应式网格布局
  • 平滑的悬停效果
  • 大图预览功能

照片墙页面

图 7:照片墙页面 - 展示了照片墙的网格布局,包含两张示例照片,每张照片都有悬停效果。

3. 纪念日页面

描述:展示和管理纪念日的页面,支持多种类型的纪念日。

功能

  • 纪念日的添加、编辑、删除
  • 自动倒计时显示
  • 已过纪念日标记
  • 多种纪念日类型

布局

  • 卡片式布局,每个纪念日一个卡片
  • 显示倒计时或已过时间
  • 分类展示不同类型的纪念日
  • 添加纪念日按钮

特色

  • 实时更新的倒计时
  • 已过纪念日的特殊标记
  • 不同类型纪念日的颜色区分

纪念日页面

图 8:纪念日页面 - 展示了两个纪念日卡片,左侧是已过的 "初识" 纪念日,右侧是未来的 "结婚纪念日",显示了倒计时。

4. 爱情故事页面

描述:展示爱情故事的页面,支持故事集和章节的管理。

功能

  • 故事集的创建和管理
  • 章节的添加、编辑、删除
  • 故事的阅读模式
  • 故事的分类管理

布局

  • 故事集列表,每个故事集一个卡片
  • 故事阅读页面,包含章节导航
  • 章节内容的优雅展示
  • 添加故事按钮

特色

  • 故事集的卡片式布局
  • 优雅的阅读体验
  • 章节的有序管理

爱情故事页面

图 9:爱情故事页面 - 展示了故事集列表,包含一个 "测试" 故事,显示了故事的创建日期、章节数和简介。

5. 爱情宣言页面

描述:展示爱情宣言的页面,支持宣言的添加和管理。

功能

  • 宣言的添加、编辑、删除
  • 按分类展示
  • 宣言的卡片式布局

布局

  • 卡片式布局,每个宣言一个卡片
  • 分类标签筛选
  • 优雅的文字展示效果
  • 添加宣言按钮

特色

  • 不同风格的宣言卡片
  • 分类标签的视觉区分
  • 简洁优雅的布局

爱情宣言页面

图 10:爱情宣言页面 - 展示了两个爱情宣言卡片,左侧是粉色心形背景的 "sweet" 类型宣言,右侧是绿色星星背景的 "romantic" 类型宣言。

6. 技术实现

响应式设计

  • 使用CSS Grid和Flexbox实现响应式布局
  • 媒体查询适配不同屏幕尺寸

交互效果

  • 平滑的过渡动画
  • 图片懒加载
  • 键盘导航支持
  • 触摸优化

数据存储

  • 使用localStorage存储所有数据
  • 数据结构优化
  • 定期备份

7. 未来展望

功能扩展

  • 导出/导入功能
  • 主题切换
  • 更多交互效果

用户体验

  • 优化加载速度
  • 提升交互流畅度
  • 增强情感连接

结语

从构思到现在,它不仅是一个技术项目,更是一份情感的结晶。每一行代码都带着我的思念,每一个功能都藏着我的用心。

异地恋的道路虽然艰辛,但因为有了这样的小期待,有了共同的回忆空间,距离反而让我们的感情更加深厚。每当我在代码中添加一个新的功能,我都会想象女友看到时的表情,这成为了我最大的动力。

现在,我正在倒计时,等待着 5 月 5 日的到来。我相信,当女友看到这个网站时,她会明白,无论距离有多远,我的心永远和她在一起。

技术可以跨越山海,代码可以传递真情。这就是这个项目最美好的地方。

附录

项目地址:https://github.com/NoEggEgg/love-memorial-website

git:[@github/NoEggEgg/love-memorial-website]