网页动效怎么做?先来亲手试一次吧。
FormTempo 收录了 22 个可以亲手操作的网页动效,从悬停反馈到滚动揭示和页面转场。每个案例都拆解行为和使用场景,并提供原生与 GSAP 两份可独立运行的 HTML。
在 GitHub 查看项目clip-path: inset()淡色为完整画面
.stage { position: relative; overflow: hidden; }.art { display: block; width: 100%; height: 100%; }
.art { clip-path: inset(calc((1 - var(--p)) * 50%)); }
function render(p) { track.style.setProperty('--p', p); showProgress(p);}
frame = requestAnimationFrame(() => { frame = 0; if (track.classList.contains('scroll-mode')) { render(Math.max(0, Math.min(1, (scrollY - start) / distance))); }});
range.addEventListener('input', () => { manual = Number(range.value) / 100; render(manual);});
gsap.registerPlugin(ScrollTrigger);const tween = gsap.timeline({ paused: true });
tween.fromTo('.art', { clipPath: 'inset(50%)' }, { clipPath: 'inset(0%)', ease: 'none' });
function render(p) { tween.progress(p); showProgress(p);}
trigger = ScrollTrigger.create({ trigger: track, start: 'top top', end: () => '+=' + (track.offsetHeight - sticky.offsetHeight), animation: tween, scrub: true,});
range.addEventListener('input', () => { manual = Number(range.value) / 100; render(manual);});
从起始画面看起。
往下滚动,或拖动演示进度,比较同一个画面的前后状态。
02使用场景
一个动作,
放进真实页面。
从作品卡片到步骤面板,看看这些动效分别能在哪些地方交代反馈、顺序和空间关系。
03全部类型
按触发方式,
浏览动效图鉴。
从触发动作入手。选一个案例,查看它怎么动、适合用在哪里,再打开详情试玩。
指针交互、滚动触发、滚动驱动、页面转场,共 22 个案例。
指针交互 · Pointer
进入与离开共用同一对位置,方向相反。移动速度和缓动可以独立选择。
- 链接悬停反馈
进入和退出各自有一条固定路径,实际指针方位不改变路线。
- 导航下划线
比较坐标相对卡片中心的归一化偏移。绝对值相等时选水平轴,正中心取右侧。进与出分别判断。
- 作品卡片揭示
鼠标在固定热区内移动时,按钮视觉层持续跟随坐标,每轴最多偏移 12 px。移出、取消或失焦后回中,触屏点按和键盘操作都能激活按钮。
- 主操作按钮
移入即开播。动画播完才接受下一次移入,触屏和键盘可以用「播放一次」触发同一段动画。
- 作品卡片的短反馈
鼠标移入显示说明,移出收起;点击或键盘操作可以保持或收起说明。
- 作品网格
滚动触发 · Scroll trigger
滚动驱动 · Scroll driven
拖动进度或滚动时,可见区域随进度双向变化。中间位置保留同一张图的中心。
- 产品主图揭示
进度由 0 走到 1 时,各图层移动预设距离。反向滚动时各层按原路径返回。
- 分层叙事
进度为 0 时看到首幅,进度为 1 时到达末幅。滚动和拖动都可以往返。
- 系列作品展示
两幅图共用同一进度。50% 时裁剪侧显示原尺寸画面的中心,缩放侧显示半尺寸的完整画面。
- 产品图的整体呈现
进度决定视频显示哪一帧。向下滚动看后面的画面,向上滚动可以回看,停下后画面也停在当前位置。
- 产品拆解或制作过程
两幅图共用进度和展开范围。硬边在裁剪线处截断,软边在同一位置附近逐渐变透明。
- 作品或产品图的显现
近处门框、中景几何体和远处日轮在同一个空间里。视点沿水平方向移动,三者在画面中的相对位置和遮挡随之变化。
- 空间叙事
进度从 0 到 1 时立方体旋转并展开;反向操作时各面沿原路径复位。
- 产品结构展示
进度增加时日间场景向后退去,夜间场景向前进入;反向滚动恢复日间场景。
- 章节叙事
页面转场 · View transition
04发布验证
每次构建,
检查实际产物。
从类型检查到静态构建,再逐项读取生成的文件。运行 npm run verify 就能执行这套检查。下方回放一次校验通过的示例。
check检查页面与组件类型通过 Astro 检查页面和组件的类型,定位属性、数据和脚本中的错误。
build生成静态站点把首页、目录、案例详情和独立示例构建为可发布的文件。
verify-build回查实际产物验证页面和示例是否齐全、本地链接和锚点是否可达,以及独立示例的脚本语法。
gzip限制首页脚本体积递归统计首页加载的本地 JavaScript,gzip 后的体积必须在预算内。
npm run verify
Verified homepage, directory, 22 cases and 44 examples.
checks check:pass build:pass verify-build:pass gzip:pass
output dist/
验证摘要
- routes
- 22 个案例 · 44 份示例
- 首页
- 目录
- 案例详情
- 独立示例
- references
- 本地资源
- 页面链接
- 页内锚点
- 示例脚本
- gzip
20 KiB · 首页 JavaScript 上限
05分界对比
硬边与软边,差在哪?
左右拖动分界线,比较同一幅图怎样在左侧直接截断,在右侧逐渐淡出。
06并排比较
同一张图,两种状态。
拖动进度条,看左图从中心展开。右图始终显示完整画面。
裁剪展开
产品主图揭示。例如在产品页逐步放开局部细节,最后让读者看到完整轮廓。 可用 clip-path: inset() 从中心打开可见范围。
08代码示例
先试效果。再复制源码。
从裁剪展开开始。同一个动效可以用原生代码实现,也可以用 GSAP 的时间轴实现。
// 裁剪展开 · 原生
.art { clip-path: inset(calc((1 - var(--p)) * 50%)); }// 裁剪展开 · GSAP
tween.fromTo('.art', { clipPath: 'inset(50%)' },
{ clipPath: 'inset(0%)', ease: 'none' });挑选一个案例
按输入方式找动作。链接反馈属于指针交互,阅读过程中随进度改变的画面属于滚动驱动。
操作并比较
先试玩演示,再看场景与行为定义。留意什么时候触发,反向操作时又会发生什么。
把示例带走
打开原生或 GSAP 示例,复制完整 HTML,保存成文件后直接用浏览器打开。
键盘操作