这一页记录我是怎么做这个网站的:动手前想清楚要什么、和 AI 的每一次对话、每个版本分别做了什么、遇到问题怎么解决。 课程要求这一页包含 5 个要素,点下面的按钮切换查看。
动手写代码之前,先想清楚要做什么、做给谁、做到什么程度。
要做什么
做一个个人作品集网站,作为「数智编程」课程的期末考核作业。网站要包含课程要求的 7 个板块:个人简介与能力、阶段作业、项目成果、过程证据、迭代记录、标志性成果专题页、最终学习复盘。
做给谁看
课程的老师(按评分标准打分),以及以后想了解我学习情况的人。
做到什么程度
达到课程的四条底线:① 网址能正常打开,手机端和电脑端都能用;② 外链有效、项目入口明确;③ 如实说明 AI 辅助的部分;④ 不公开任何密钥和隐私。并且要能看出网站是持续迭代做出来的,不是期末一次性补做。
没有专业画图工具,我用「文字结构描述 + 方块线框图」来画每一页的结构:页面分成哪几块、按什么顺序排。
首页布局原型
首页是入口,按「从上到下、从重要到次要」排:先让别人知道我是谁(自我介绍区),再展示网站里有什么(7 张卡片),最后说明这个网站在持续迭代。手机屏幕窄,卡片会从电脑上的一行 3 张自动变成一行 1 张,这是用 Tailwind 的响应式写法做到的。
方块线框图
文字结构描述
首页(/) ├─ ① 导航栏:左侧「张海燕 作品集」,右侧 8 个栏目链接(手机端收进 ☰ 菜单按钮) ├─ ② 自我介绍区:大标题「你好,我是 张海燕」+ 一句话介绍 + 两个入口按钮 ├─ ③ 网站内容导航:7 张板块卡片(电脑一行 3 张、平板一行 2 张、手机一行 1 张) ├─ ④ 迭代状态说明:最近更新日期 + 到「迭代记录」的链接 └─ ⑤ 页脚:AI 辅助说明 + 版权信息
「关于我」页面布局原型
关于我页按评分标准的要素排:先自我介绍(方向),再列能力清单(工具 / 技能),最后说学习目标。能力清单分成两列卡片,每项右侧带等级标签(熟练 / 会用 / 学习中),这样老师一眼就能看出我的真实水平。
方块线框图
文字结构描述
「关于我」页(/about) ├─ 页面标题 + 副标题「个人简介与能力」 ├─ ① 自我介绍:3 个自然段 ├─ ② 能力清单:两列卡片,每项右侧带等级标签(熟练 / 会用 / 学习中) ├─ ③ 学习目标:2 张卡片(本学期 / 接下来) ├─ ④ 联系我:邮箱链接 └─ ← 回到首页
首页「3D 活页本翻书」原型(试做后已回退)
后来想让首页更有自己的风格,试做了一版「把首页做成一本活页本」:深灰色桌面上放一本带金属活页圈的牛皮纸本子,点击右侧纸页会像真书一样向左翻开,露出内页(褶皱纸 + 复古贴纸,再点一下合上)。试做完成后,觉得 3D 翻书和课程要求的「7 个板块入口一目了然」有冲突,于是暂时回退到卡片版首页;翻书版代码没有丢,暂存在 Git stash 里,想好了随时可以恢复。
方块线框图
文字结构描述
首页(/)——「活页本翻书」试验版 ├─ ① 深灰色哑光桌面背景(带一点噪点,模拟真实桌面) ├─ ② 书本体:用一张实拍封面照片切图 + CSS 3D 翻转拼成 │ ├─ 左侧固定层:约占 12.5%,显示金属活页圈,翻页时纹丝不动 │ └─ 右侧翻转层:约占 87.5%,显示牛皮纸封面,点击后绕书脊向左翻 180° ├─ ③ 翻开后露出的内页:褶皱纸纹理 + 复古装饰贴纸,再点一下合上 ├─ ④ 导航栏:换成深琥珀色,配合深色背景;首页不再显示页脚 └─ ⑤ 其余页面保持原样不变
「关于我」页:照片叠放 + 个人名片
把自我介绍从一长串文字改成先看到人:三张照片叠放在左侧,右侧是名字和一句话介绍;点击两侧照片会翻到中间。下面再按故事、爱好、能力、成绩、下一步展开。
方块线框图
文字结构描述
关于我(/about/) ├─ ① 个人照片区:左、中、右三张照片叠放,中间最大 ├─ ② 右侧名片:HELLO, I AM / 姓名 / 一句话定位 / 四条基本信息 ├─ ③ 我的故事:3 段文字 ├─ ④ 爱好与日常:四张爱好卡片 + 单区照片叠放 ├─ ⑤ 能力与工具:2×2 卡片 ├─ ⑥ 成绩与成果:3 张数字卡片 + 项目入口 ├─ ⑦ 下一步 + 联系方式 + AI 说明 └─ ⑧ 回到首页
「阶段作业」页:紧凑卡片 + 详情弹窗
原来一条一条竖向时间线太长,也不能一眼看全七次作业。改成四列紧凑卡片,只显示缩略图、项目名、阶段和日期;点击卡片再弹出这次作业的完整介绍。
方块线框图
文字结构描述
阶段作业(/works/) ├─ ① 顶部说明:07 STAGES / COURSEWORK ├─ ② 作业卡片:桌面四列、手机两列 │ ├─ 缩略图 │ ├─ 项目名 │ └─ 阶段 + 日期 ├─ ③ 点击卡片 → 详情弹窗 │ ├─ 左上:项目图片 │ ├─ 右上:阶段 / 项目名 / 作业要求 │ └─ 下方:我的过程 / 技能标签 / 访问项目 └─ ④ 回到首页
「项目成果」页:漂浮截图 + 单项详情
不把项目图片钉在木板上,也不让每个墨团代表一个项目。截图直接浮在深色背景上,鼠标靠近时被水流推开;下方只保留一个项目详情框,左右切换。
方块线框图
文字结构描述
项目成果(/projects/)
├─ ① 漂浮截图区:7 张项目首页截图,大小错落、互相叠放
├─ ② 鼠标靠近:按距离和指针速度把截图推开
└─ ③ 项目详情框:
├─ 左上:可点击缩略图
├─ 右侧:项目名 / 角色 / 简介
├─ 功能与工具标签
└─ 左右按钮或方向键切换「过程证据」页:五个按钮切换
五个要素不再全部铺在长页面里,改成顶部五个胶囊按钮;下面一次只显示当前板块,滚到下方也能切换,右下角出现回到顶部。
方块线框图
文字结构描述
过程证据(/process/) ├─ ① 顶部说明 ├─ ② 五个按钮:需求 / 原型 / 提示词 / 版本 / 问题解决 ├─ ③ 当前板块内容 ├─ ④ 底部同一组五个按钮 └─ ⑤ 滚动后右下角「回到顶部」
「迭代记录」页:版本时间线
按课程顺序把每次改动串成一条时间线,每条都写清楚改了什么、为什么改、效果如何、下一步,能直接和 Git 提交记录对照。
方块线框图
文字结构描述
迭代记录(/iterations/) ├─ ① 页面说明 ├─ ② 版本时间线 │ ├─ 版本号 + 日期 │ ├─ 一句话标题 │ └─ 改了什么 / 为什么 / 效果 / 下一步 └─ ③ 回到首页
「学习复盘」页:收获、不足、下一步
用三块内容收尾:这学期真正学会了什么、哪里还不足、接下来准备怎么补。不写空泛的总结,尽量对应到具体的页面和项目。
方块线框图
文字结构描述
学习复盘(/reflection/) ├─ ① 这学期学到了什么 ├─ ② 还不够好的地方 ├─ ③ 下一步计划 └─ ④ 回到首页
我和 AI 的对话记录。如实写出来,这不是减分项,反而是课程明确要求的「真实」证据。
我问 AI:
我是编程小白,正在制作我的个人作品集网站。这个网站会作为我的期末考核作业……请推荐一套最适合我这种小白、且方便以后「持续迭代」的技术栈(比如 Next.js + Tailwind CSS?),用大白话告诉我为什么选它。
AI 回答的要点:
推荐 Next.js + Tailwind CSS,并给出理由:页面零件可以复用(导航栏只写一次,所有页面共用);样式直接写在标签上,不用在多个文件之间来回跳;做手机/电脑自适应最顺手;网上教程多、能免费部署上线。另外建议先用 JavaScript 而不是 TypeScript,避免多出一类类型报错。
我自己做了什么:
我接受了这个推荐。我原本以为要自己一页一页复制导航栏,看完解释才知道可以让所有页面共用一套外壳。
我问 AI:
我已经在 src/data/site.js 里把名字和邮箱改成我自己的了,并且浏览器里已经看到了变化。现在请帮我做两件事:在 README.md 里更新第 1 次迭代记录(包含:改了什么、为什么、效果、下一步四要素);帮我把这次改动提交到 Git,备注写上「第 1 次迭代:修改个人信息,完成初步展示」。我是新手,请一步一步告诉我在终端里输入什么命令。
AI 回答的要点:
先检查 Git 状态,发现 Git 还没有配置过身份信息(不配置的话提交会直接报错),于是给出完整顺序:设置身份 → 初始化仓库 → 暂存文件 → 检查 → 提交 → 查看记录。同时指出提交备注和 README 里的编号对不上,建议微调。
我自己做了什么:
我照着命令一步步做了,第一次提交成功。这件事让我知道:Git 要先设置身份才能提交,而且提交记录里的邮箱是公开可见的。
我问 AI:
停一下,我意识到我之前没有把最核心的课程作业评分标准告诉你,导致你现在只是在做普通的个人主页,这不符合作业要求。请仔细阅读并记录以下我的作业硬性要求:【3.1 必须包含的内容】【3.2 合格状态(四条底线)】……请你检查目前 src/app 下的所有页面结构,告诉我哪些符合要求、哪些完全缺失,并重新规划网站的路由结构和数据占位。先不要写具体页面的细节代码,请先给我一份网站架构规划。
AI 回答的要点:
逐条对照后指出:7 项要求里只有 1 项做了一半,其余大多是占位牌;并且发现一个更严重的问题——迭代记录只写在本机的 README 文件里,老师在网站上看不到。随后为每个模块建了对应的数据文件,把评分标准里的要素做成数据字段,并在 README 里建了一张任务清单。
我自己做了什么:
这次让我明白:光有「7 个板块」不够,每一页必须包含哪些要素才是得分点。我确认了 AI 提的三条建议(新增声明页、把迭代记录搬到网站、暂不做详情页)。
我问 AI:
之前的修改计划作废。我们现在专注做最核心的「3D 翻书外壳动画」,绝对不要写任何文字标题(如 My Portfolio 等),也不要填充任何模块内容。我已经在 public/images/ 准备了素材:cover-bg.jpg(牛皮纸封面)、wax-seal.png(火漆印章)、paper-bg.jpg(褶皱纸内页)、decor.png(复古装饰拼图)。请把首页重写成一本书:封面居中、自适应尺寸,火漆印章贴在封面中间偏右(用 mix-blend-multiply 去掉白底);点击印章触发 CSS 3D 翻页动画(perspective + transform-origin: left center,约 0.8 秒),封面像门一样向左翻开,露出 paper-bg.jpg 褶皱纸内页,用 decor.png 截取干花、旧邮票等装饰散落在边角,中间留白。
AI 回答的要点:
AI 用 CSS 3D 变换做出了第一版「书」:书本容器居中,封面铺满牛皮纸底图、右上贴火漆印章;外层容器设置 perspective,点击印章后封面绕左边缘旋转翻开,露出褶皱纸内页和装饰贴图。
我自己做了什么:
我在浏览器里点开试了翻页,方向对了,但细节太粗糙:封面四周有一圈死板的框、照片是斜的、火漆印章位置突兀,整体不像一本真书。我决定再提一轮细节重构。
我问 AI:
我需要你对封面进行一次全面的细节重构,请一次性完成以下所有修改:一、视觉与外观优化:彻底删掉包裹封面的浅色背景容器(保留 box-shadow 立体阴影),摆正并放大封面图(background-size 用 cover 或 120%、background-position: center);在封面右侧加一个约 4–8px 的米黄色垂直条模拟书页厚度;删除火漆印章。二、交互与翻页功能(修复重点):整个封面绑定 onClick 切换状态,父容器要有 perspective,翻开时 transform-origin: left center + rotateY(-180deg),持续约 0.8 秒,翻过去露出内页 paper-bg.jpg。三、背景颜色:把黄棕色木纹背景换成深灰哑光色(如 #2a2a2a 或深灰带噪点),衬托牛皮纸的书。
AI 回答的要点:
AI 按清单逐项处理:去掉边框容器、摆正放大封面、右侧加书页厚度条、移除火漆印章、背景换成深灰噪点桌面,并让点击翻页动画更顺滑。
我自己做了什么:
效果比第一版更像一本放在桌面上的书了,但我还是觉得「封面是一张平铺图片」的感觉太强,不像实物。正好我拍了一张新照片,决定换成真实照片来做封面。
我问 AI:
我刚刚覆盖更新了全新的封面底图 cover-bg.jpg。新图是一张端正的平视照片,左边是金属活页圈,右边是牛皮纸。请彻底重写封面的视觉和交互,一次性完成以下所有修改:一、整体外观清理:彻底删除之前所有的拉大、裁剪和歪斜代码,封面端正居中,背景换深灰调(如 #2a2a2a);删除假厚度白边、火漆印章和多余的容器边框。二、核心翻书交互(极其重要):利用 CSS 切图做视觉魔术——左侧固定层(活页圈,宽约 15%,background-position: left center,绝对不旋转,z-index 最高)+ 右侧翻转层(牛皮纸,占剩余 85%,background-position: right center,cursor: pointer,点击触发 rotateY(-180deg)、transform-origin: left center、backface-visibility: hidden)。三、翻开后的内页:右侧翻转层下方放 paper-bg.jpg 内页,用 decor.png 点缀胶带或邮票。我要看到:一本端正的、带着金属环的牛皮纸本子放在深色桌面上,点击右侧纸页,纸向左翻开,金属环纹丝不动,底下露出内页!
AI 回答的要点:
AI 先把照片逐像素分析了一遍(构图比较复杂:活页圈、纸页、树枝互相咬合,直接按 15%/85% 切图接缝处会露馅),重新裁剪出封面图并把接缝定在恰好 12.5% 的位置;然后用「background-position 无缝拼接」把一张照片切成左右两层:固定层显示照片左侧 12.5%(活页圈),翻转层显示右侧 87.5%(牛皮纸),两层按相同比例绘制同一张图,接缝完全看不出来。翻页用 CSS 3D 翻转实现,固定层不参与旋转、放在最上层。
我自己做了什么:
我在浏览器里反复点击测试:纸页向左翻开、金属环纹丝不动、内页露出来——就是我想要的效果!不过后来觉得它和课程要求的「7 个板块入口一目了然」有冲突,决定先回退到卡片版首页,翻书版代码存在 Git stash 里没有丢。
我问 AI:
你现在回到上次 git 存的那个版本
AI 回答的要点:
AI 把书封面相关的改动打包进 Git stash(不是删除,而是暂存起来,随时可以取回),然后把首页、导航栏、页脚三个文件恢复到上一次提交时的状态,网站回到卡片版首页。
我自己做了什么:
确认网站恢复到了提交时的版本,翻书版代码没有丢失。我也弄懂了 git stash 是干什么的:像把文件暂时收进抽屉,工作区恢复干净,抽屉里的东西随时能拿回来。
我问 AI:
首页不要普通卡片了,想要一整片黑色背景上的流体墨迹,中间是巨大的 ZHANG HAIYAN。鼠标经过字体时字母要像被水搅开、融进墨里,不要粒子或烟;左边保留七个模块入口。
AI 回答的要点:
把首页标题改成 GPU 流体场里的染料文字:速度场负责流动,染料负责字形和墨色,鼠标只改变局部流场;左边用玻璃卡片做七个模块入口。
我自己做了什么:
我确认不要粒子后,删掉了粒子方案。流体标题一开始边缘会撕裂,后来通过高分辨率字形、限制 UV 位移和局部采样解决;模块页也沿用了同一套墨迹语言。
我问 AI:
往下滑页面时,大标题不要固定在背景上,要逐渐缩小、往上滑到看不见。鼠标在下半部分移动时,墨迹应该留在鼠标附近,只有墨漂到字母旁边才影响字母,不要平白多出一层。
AI 回答的要点:
模块页把标题、背景和鼠标墨合并到一张固定视口的全屏流体画布。滚动时不销毁 canvas,而是把标题的采样坐标按进度缩放、上移和淡出;鼠标墨只在指针附近生成,标题是否被影响由墨的实际流动决定。
我自己做了什么:
一开始标题和背景是两张画布,鼠标在下方只能推动背景,推不到标题;强行映射指针又会在字母旁多出一团墨。合并成单画布后才自然。标题缩小后高光还停在原尺寸,后来把 dye、gradient、rim、specular、caustic 和 shadow 都统一到 titleUV。
我问 AI:
项目成果页不要木板和图钉了。项目截图要直接浮在深色背景上,像在水里漂着,被水流推动;鼠标靠近图片时,推动幅度要更明显。下面的项目索引改成一个框,只显示一个项目的信息,左右用 < 和 > 切换。
AI 回答的要点:
项目截图改成独立漂浮层:每张图有不同周期和相位的漂移;鼠标进入范围后按距离和指针速度施加推力,停下后回到漂浮轨迹。下方改成单项详情框,左右按钮和键盘方向键切换项目。
我自己做了什么:
我试过木板、图钉、照片堆叠和圆形水墨,最后都觉得和网站整体气质不搭,才改成直接漂浮的截图。详情框后来又把缩略图放到左上,项目名放右侧,并放大介绍文字。
我问 AI:
引用声明和页脚里的 AI 辅助说明写错了:前期用的是 Claude Code,后期才是 DeepSeek Harness,请改准确。
AI 回答的要点:
把关于我、引用声明和页脚三处统一改成:前期 Claude Code,后期主要使用 DeepSeek Harness;只写真实用过的工具,不把后期工具写成全程。
我自己做了什么:
我核对了实际开发顺序,按前期和后期的真实使用情况改写,没有把两个工具混在一起。
这个项目从第一版到现在,每一版分别做了什么。这条时间线能证明网站是一步步改出来的。
搭好空壳:导航栏(手机端自动变成菜单按钮)、页脚、首页和 7 个板块页面,8 个页面之间互相跳转、没有死链接。
换成我自己的姓名和邮箱。只改了 1 个文件里的 2 行,首页标题、导航栏、页脚 3 个地方同时更新。
完成「关于我」页:自我介绍、能力清单(熟练 / 会用 / 学习中三档如实标注)、学习目标。
对照评分标准补齐结构:新建 5 个数据文件,把每一页必须包含的要素做成字段;README 加上任务清单。
完成「过程证据」页:需求、原型、提示词、版本、问题解决,5 个板块配齐。
给首页做「3D 翻书」试验:封面用牛皮纸底图 + 火漆印章,点击印章封面像门一样 3D 向左翻开,露出褶皱纸内页和干花装饰。方向对了,但细节粗糙(有死板的框、照片歪斜、印章突兀)。
封面细节重构:去掉边框容器、摆正放大封面、右侧加书页厚度条、删掉火漆印章,背景换成深灰哑光桌面(带噪点)。
换成实拍照片做封面:左侧金属活页圈固定不动,右侧牛皮纸页点击向左翻开,露出褶皱纸内页。做法:逐像素分析照片后重新裁剪,接缝定在恰好 12.5%,切成「固定层 12.5% + 翻转层 87.5%」两层,用 background-position 无缝拼接,接缝看不出来。
翻书版首页和课程要求「7 个板块入口一目了然」有冲突,暂时回退到卡片版首页(v6–v8 的代码用 git stash 暂存,没有丢失)。
首页改成全屏流体墨迹标题:黑色背景、巨大的 ZHANG HAIYAN、鼠标搅动和局部颜料;左侧七个模块玻璃入口完成。
模块页合并为单张全屏流体画布,标题、背景和鼠标墨共享同一速度场;标题随滚动缩小、上移并淡出,内部高光同步缩放。
项目成果页改成漂浮截图,鼠标可按距离和速度推动图片;项目索引改成单项详情框,含可点击缩略图、项目简介、左右按钮和键盘切换。
「关于我」页重做:三张个人照片叠放在左侧,点击可翻到中间;右侧是姓名、定位和基本信息;下面按故事、爱好、能力、成绩、下一步重新组织。
「阶段作业」页从竖向时间线改成紧凑四列卡片,点开卡片才显示作业详情;详情弹窗按手绘结构重排:左图、右项目名和作业要求,下方整行放我的过程。
「爱好与日常」前移到「我的故事」后面;新增一块照片区域,照片叠放、圆角,并改为循环从底部弹出、停留、消失的动画。
根路径改为最新的工作室首页,旧白色首页不再作为入口;修复 Vercel 子页面 404,补上 trailingSlash,并恢复 GitHub 推送后的自动部署。
性能优化:爱好照片动画离开视口时暂停;模块页流体降低分辨率与渲染比例,滚动后降帧;个人照片从 JPG 换成 WebP,减少解码和传输开销。
我遇到的报错和困难。把报错原文贴上来最有说服力 —— 它证明这些都是真实发生过的。
遇到的情况
创建项目时终端报错:Could not create a project called 「MyPortfolio」 because of npm naming restrictions: name can no longer contain capital letters
我的判断
创建项目的工具规定项目名不能含大写字母,而我的文件夹叫 MyPortfolio(含大写 M 和 P)。
怎么解决的
先用小写名 my-portfolio 创建项目,再把生成的所有文件平移到当前文件夹。网站功能完全不受影响。
遇到的情况
项目模板默认会从 Google 服务器下载字体。国内网络环境下经常连不上,会导致启动报错或者加载很慢。
我的判断
模板为了让英文字体好看,默认开启了联网下载字体。
怎么解决的
去掉联网下载的字体,改用电脑系统自带的中文字体(PingFang SC / 微软雅黑 等)。打开速度更快,断网也能正常显示。(这一条是提前规避,并没有真的报错)
遇到的情况
Git 里登记的作者邮箱是我带手机号的旧邮箱,每一次提交都会把它写进提交记录。以后代码传到 GitHub,任何人都能看到,等于公开了手机号。
我的判断
最开始配置 Git 时用的是旧邮箱,而且我当时并不知道提交记录里的作者信息也是公开可见的。
怎么解决的
先把 Git 的邮箱换成不含手机号的新邮箱,再用 git commit --amend --reset-author 重写那一次提交的作者信息。因为当时代码还没上传给任何人,所以改起来很安全。
遇到的情况
网站按「7 个板块」搭好了空壳,但拿到课程详细评分标准对照后才发现:大部分页面只有一块占位牌,而且迭代记录只写在本机的 README 文件里,老师浏览网站时根本看不到。
我的判断
一开始只拿到「要有哪 7 个板块」的粗略要求,没有拿到「每一页必须包含哪些要素」的细则,就凭自己的理解先动手搭了框架。
怎么解决的
拿到详细评分标准后逐条对照,重新规划数据结构:把每个页面必须包含的要素做成数据字段(比如这一页的 5 个要素),并在 README 里建了一张任务清单,随时核对哪些做完了、哪些还没开始。
遇到的情况
AI 分析封面照片 cover-bg.jpg 时,得到的尺寸是 1259×1299,和我刚放进文件夹的新照片对不上。
我的判断
我正好在覆盖这张照片,AI 分析的时候读到的还是旧文件——两边时间上撞车了。
怎么解决的
先用 md5 校验文件指纹确认新旧(1.8MB 变成 3.1MB),等新照片复制完成后再重新分析。教训:文件正在变化时,读到的可能是旧数据,动手前先核对。
遇到的情况
新照片里活页圈、纸页边缘、树枝互相咬合,找不到一条干净的竖直线把照片切成左右两层:环弧线伸到 x247、树枝伸到 x226–311、白色纸从 x319 开始,底部还有一条白色带子。
我的判断
照片是实拍的,物体边缘本来就是不规则的,不像画的图有整齐边界。
怎么解决的
逐像素测量整张照片的构图,把底部有白色带子的部分裁掉(裁到 y1700),接缝选在 x250 的位置——恰好是整张照片宽度的 12.5%,左边完整保留所有活页圈,右边纸页也完整。再用「background-position 无缝拼接」:固定层背景尺寸 800%、翻转层 114.2857%,两层按相同比例画同一张图,接缝完全看不出来。
遇到的情况
AI 写脚本分析照片颜色时,输出的颜色很诡异,比如出现纯绿色(1,255,2),明显不是照片里该有的颜色。
我的判断
照片是 RGBA 四通道格式(每个像素 4 个字节),脚本却按 RGB 三通道的偏移量去读,读错位了。
怎么解决的
按图片的实际通道数(info.channels)修正读取偏移,颜色就正常了。这件事也说明 AI 会出错,出错之后要会核对和修正,不能直接相信。
遇到的情况
模块页标题和背景原本是两张画布:鼠标停在页面下半部分时,背景有墨迹,标题却完全不动;把指针坐标强行映射到标题后,又变成字母旁边平白多出一团墨。
我的判断
标题画布只覆盖顶部,背景画布覆盖整页,两个画布各自维护速度和染料,鼠标事件没有共享同一个流场。
怎么解决的
把标题和背景合并到一张固定视口的全屏流体画布。鼠标墨只出现在指针附近,标题是否被影响由墨的实际流动决定;滚动时再单独对标题采样坐标做缩放和上移。
遇到的情况
标题随滚动缩小时,字母内部的水光、高光和边缘亮部没有跟着缩小,看起来像高光粘在原来的位置。
我的判断
当时只缩放了文字形状的 dye 采样,rim、gradient、specular、caustic 和 shadow 仍然读取未缩放的整页坐标。
怎么解决的
把所有和标题有关的采样都改到同一套 titleUV:dye 的五点采样、梯度、边缘光、焦散和投影都使用缩放后的坐标,高光才和字母一起缩小。
遇到的情况
项目页尝试过木板、图钉、照片堆叠和圆形水墨,但都和网站整体的流动气质不搭;图片的鼠标效果一开始也看不出来。
我的判断
前期把项目图片当成独立装饰,背景和图片各自运动;鼠标效果只做整体缩放,没有和指针位置、移动速度建立关系。
怎么解决的
最后改成深色背景上的漂浮截图:不加木板和钉子,每张图有独立漂移;鼠标按距离和速度施加推力,靠近才明显,离开后回到漂浮轨迹。
遇到的情况
阶段作业页改成横向卡片后,详情弹窗里的图文关系一直不对:图片太大、文字跑到下面、滚动条很明显。
我的判断
一开始把图片、项目名、作业要求、我的过程都放进同一个滚动区域,没有按信息层级分区,图片又用固定高度裁切。
怎么解决的
按手绘稿重新分区:上半部分左图、右侧项目名和作业要求;下半部分整行放我的过程、技能和访问项目。图片缩小并完整缩放,弹窗滚动条隐藏。
遇到的情况
爱好照片的循环动画在自己的电脑上完全不动,录屏里九张图都是静止的。
我的判断
系统开启了「减少动态效果」,CSS 里的 prefers-reduced-motion 降级规则把 animation 直接设成了 none。
怎么解决的
删掉关闭动画的降级规则,强制启用 7 秒循环;同时让动画在离开视口时暂停,避免在页面其他位置持续占用资源。
遇到的情况
About 页滑动明显卡顿,尤其从个人介绍往下滚时;但 Studio 首页相对好一些。
我的判断
九张大幅照片的 CSS 动画即使滚出视口也在后台运行,加上全屏 WebGL 流体每帧都在重绘,两个开销叠在一起。
怎么解决的
用 IntersectionObserver 让照片动画只在可见时运行;模块页流体从 512×320 降到 448×280、渲染比例降到 0.8,并在标题滚出后把帧率降到约 24fps。
遇到的情况
部署到 Vercel 后访问 /process 出现 404,但本地和 Netlify 正常。
我的判断
Next.js 使用了 trailingSlash,Vercel 没有把不带斜杠的路径跳到带斜杠的目录地址。
怎么解决的
新增 vercel.json,设置 trailingSlash: true,统一跳转到 /process/ 这类带斜杠地址。
遇到的情况
Netlify 的自动构建在连续提交时出现 error / skipped,线上一直停在旧版本。
我的判断
Netlify 侧连续构建的状态异常,不是代码构建失败;同一份代码在本地和 Vercel 都能正常构建。
怎么解决的
确认本地 build 通过后,在 Netlify 后台手动 Trigger deploy → Clear cache and deploy;同时把部署状态写进过程证据,避免误以为是代码问题。