一、视频那 5 个名字,先说清它们是什么
视频里给了 5 个动效名:Cursor-driven Hotspot Exploded Reveal(光标驱动的热点拆解)、Swipe Gallery Carousel(横滑图集轮播)、Scroll-driven Camera Push(滚动驱动的镜头推移)、Scroll-driven Glitch Cut(滚动驱动的故障切景)、Cursor-driven Camera Orbit(光标驱动的镜头环绕)。它们不是某个库的 5 个预设,而是用光标 / 滚动当「摇杆」,驱动一组镜头语言」的 5 种网页动效技法词。GitHub API 搜 hotspot exploded reveal、glitch cut scroll 都是 0 结果,第三方 studio 站(如 scaleus.in)把它们当「pick the motion you want and we build your site on it」的技法菜单在卖——说明这是商用创意 studio 的通用技法,不是能直接 npm i 装某个包的成品。
跟站内 《8 个高级交互动效》(article-113,磁吸光标 / conic 边框 / 弹簧交错这类「UI 高级感微交互」)不同档:那篇拆的是组件级微交互,这篇拆的是镜头级运镜——主角不是某个按钮 / 卡片,而是「整个画面像电影镜头一样被光标或滚动推着走」。
二、5 种技法逐条拆解(机制 + 可跑骨架)
① 光标驱动的热点拆解 Hotspot Exploded Reveal
机制:把一个 3D 产品 / 场景「爆炸」成散开的零件,散落位置由光标坐标驱动——光标到哪半边,哪半边零件就聚拢 / 散开,让「拆解」这件事本身有了指向性。本质是 Three.js 里给每个 sub-mesh 算一个 explode 向量,再用 lerp 把目标 offset 插值到当前光标映射值。
// 每个零件:基准位 home + 爆炸方向 dir(从中心指向自身)
parts.forEach(p => {
const t = cursorMix; // 光标横坐标 → 0~1,控制「散开程度」
p.position.copy(p.home).addScaledVector(p.dir, t * maxExplode);
});
// 每帧:cursorMix = lerp(cursorMix, targetMix, 0.08) 做阻尼② 横滑图集轮播 Swipe Gallery Carousel
机制:图片沿 X 轴排成一排,竖滑 / 滚轮把它横移(把 scroll 映射成 carousel 的 translateX),到每张图时「对齐」到视口中心,用 sticky + scroll-driven offset 实现「滚动一条纵轴、看一条横轴画廊」。GSAP ScrollTrigger 一行就能把 scroll 接到 x。
// Lenis 平滑滚 + GSAP 把 3 屏的滚动区映射成画廊横移
gsap.to(track, {
x: () => -(track.scrollWidth - innerWidth),
ease: "none",
scrollTrigger: { trigger: wrap, start: "top top",
end: () => "+=" + (track.scrollWidth - innerWidth),
scrub: 0.6, pin: true, invalidateOnRefresh: true }
});③ 滚动驱动的镜头推移 Camera Push
机制:不推画面、推相机——把整段 3D 场景的推进节奏交给滚动进度(progress 0→1 驱动相机沿一条路径 moveAlongPath),读者滚一下,镜头就往前推一格,画面有「被牵着走」的电影临场感。这是 scroll-driven 3D 的招牌用法。
// 相机沿 CatmullRom 路径推进,progress 由 ScrollTrigger scrub 提供
gsap.to(cameraState, {
progress: 1, ease: "none",
scrollTrigger: { trigger: scene, start: "top top",
end: "bottom bottom", scrub: true }
});
// 每帧:camera.position.copy(path.getPointAt(cameraState.progress));
// camera.lookAt(path.getPointAt(Math.min(cameraState.progress+0.04,1)) );④ 滚动驱动的故障切景 Scroll-driven Glitch Cut
机制:镜头在两个场景间「跳切」的瞬间,叠加一层故障(RGB 错位 + 扫描线 + 随机位移抖动),让「切」变得有能量。用 shader 在切点 200ms 内拉满 glitch 强度、随后衰减最干净,纯 CSS 抖动容易糊。
// 切点触发:glitchAmt 冲到 1,随后指数衰减
glitchAmt = 1;
// 每帧:glitchAmt *= 0.85; shader 里用 glitchAmt 调制 uv 横向错位 + 通道分离
vec2 off = vec2(sin(uv.y*40.0)*0.01, 0.0) * glitchAmt; // 横向撕裂
col.r = texture(tex, uv + off).r; // RGB 通道错位
col.b = texture(tex, uv - off).b;⑤ 光标驱动的镜头环绕 Cursor Camera Orbit
机制:把光标 X/Y 映射成相机的方位角 / 俯仰角,让镜头绕着主体「转」——光标在画面左,相机就在主体右侧往左看,反之亦然,主体始终居中,靠视差造出深度。就是电影里最经典的 Orbit / Circular Dolly,搬到网页上由鼠标驱动。
// 光标 → 球面坐标(theta 方位角 / phi 俯仰角)→ 相机位置
theta = (cursorX / innerWidth) * Math.PI - Math.PI/2;
phi = (cursorY / innerHeight) * Math.PI/2;
r = orbitRadius;
camera.position.setFromSpherical(r, phi, theta);
camera.lookAt(0, subjectY, 0); // 每帧 lerp 平滑,别硬跟三、落地工具:这 5 种该配什么库(均 GitHub API 实查)
| 库 | 负责什么 | 实查数据 |
|---|---|---|
GSAP + ScrollTrigger(greensock/GSAP) | 把滚动 / 光标进度接到任意属性(scrub 是镜头语言的核心胶水) | ★29,010 / 2,240 forks / JS / pushed 2026-04 |
Three.js(mrdoob/three.js) | 热点拆解 / 镜头推移 / 环绕这 3 种的 3D 场景与相机 | ★116,200 / 36,614 forks / MIT / 2026-10-10 还在推 |
Lenis(darkroomengineering/lenis) | 平滑滚动基座(scroll-jack 时代被弃用,现在用它接 GSAP) | ★16,349 / 712 forks / TS / MIT |
Framer Motion(motiondivision/motion) | React 里做横滑轮播 / 交错入场的声明式动画(framer/motion 已 301 转到 motiondivision) | ★35,303 / TS / MIT / 2026-10-09 活跃 |
骨架里的 scrub、pin、invalidateOnRefresh 是 GSAP 侧;3D 那 3 种的 getPointAt / setFromSpherical 是 Three.js 侧;横滑在 React 项目里可整段换成 Framer Motion 的 useScroll + useTransform。
四、怎么把 5 种串成一条「电影感」叙事
单独用一个是「炫技」,串起来才是「叙事」。一套可复用的节奏:开篇 Camera Orbit(光标环绕,先让主体转起来立空间)→ 推进用 Camera Push(滚动牵着镜头进入)→ 关键处 Glitch Cut(切场景带能量)→ 用 Hotspot Exploded(光标拆解看内部)→ 收尾 Swipe Gallery(横滑把一组成果并排铺开)。顺序本身就是「进入—深入—揭示—总结」的电影结构,5 种技法各占一个叙事节拍,互相不打架。
五、边界与坑
- 性能先于炫:Three.js + 全屏 WebGL 在低端机 / 手机上会卡,热点拆解的零件数、环绕的采样半径都要按设备降级;Glitch 的 shader 只在切点那 200ms 开,别常驻。
- 滚动别抢用户的:scroll-driven 一旦用
pin就把滚动「劫持」了,务必配 Lenis 平滑滚 + 提供prefers-reduced-motion降级(直接给静态图)。 - 光标只在桌面:4 种 cursor-driven 里,触屏没有「光标」,要退化成「手指按住拖动」或用陀螺仪,移动端得重做一套输入映射,别指望一套代码通吃。
- 数据红线:这 5 个名字是技法词、不是可查名的产品(GitHub 搜均 0),正文只给实现骨架,不挂任何「某某库的某预设」的假仓库链接;上面 4 个实现库的星数是 2026-10-10 API 实查,非口播。
六、我的判断
视频把这 5 个当「必会动效」推,值得学的不是某个具体效果,而是「把光标 / 滚动当摇杆、用镜头语言组织一个网页」这套思路——它把网页从「往下滑刷内容」升级成「被镜头带着走一段」,这正是现在创意 studio(scaleus.in 那类)卖单贵的原因。真正要下功夫的是①拆解和⑤环绕这种 3D 运镜(靠 Three.js 相机 + lerp 阻尼),它们最出「高级感」也最容易被抄;②横滑和④故障是「加分项」,③推移是「骨架项」(没有它整条线就散了)。落地顺序建议:先 Lenis 把平滑滚接好 → 用 ScrollTrigger 做③推进当主干 → 再叠 Three.js 的①⑤上量 → 最后②④点缀。跟站内 《GSAP 技能包》、《ThreeUI 3D 网页模板》是互补关系:那两篇是「库 / 模板」,这篇是「镜头语言」,合起来就是一套能直接开做的网页动效方法论。