返回博客
Three.js镜头动效Last.fm交互设计

3D 首页开发记录 05:镜头靠近物件时不要丢掉房间

黑胶唱机、显示器和书法鸟的聚焦曾经后退、漂移和越过墙面。稳定版本用单一时间线、投影校验和原生音乐卡片收敛交互。

·约 453 字

点击黑胶唱机、显示器或书法鸟以后,早期镜头会先拉远、再横向漂移,末端还会二次修正。单独看每段缓动都很平滑,组合起来却像镜头失去目标,甚至让整个房间跑到视野外。

一个进度控制所有通道

稳定方案使用一条端点平滑的半余弦进度,同时插值相机位置、朝向和目标点。开始与结束的速度都归零,但中间不再加入独立的“装饰弧线”。每次聚焦还会用真实 Box3 和相机投影采样,证明目标在整个进入与返回过程都留在视口安全范围内;无法证明时就保持更保守的构图。

黑胶唱机最终采用稍远、正面、轻微俯视的视角。导入模型中转盘、唱片、唱臂等零件的局部原点并不安全,因此聚焦只移动相机,不再为了动效旋转这些叶子网格,避免出现盖子或部件“飞出去”。

十条记录属于 DOM,不属于贴图

最近听歌的十张卡片不是 CanvasTexture,也不是 WebGL 平面。它们是原生 DOM 链接,保留真实文字、键盘焦点和 Last.fm 外链;编号 01–10 按环形顺序依次出现。十卡共享一个很小的指针倾斜平面,命中的卡片只轻微浮起,不依赖 hover 才能看见信息。

这样 Three.js 继续只维护一个 renderer,音乐内容仍然清晰可点。镜头负责把唱机带到叙事中心,DOM 则负责文字、链接和可访问性,两层各自做擅长的部分。

黑胶唱机聚焦与最近十曲环形卡片