网页动效怎么做?先来亲手试一次吧。

FormTempo 收录了 22 个可以亲手操作的网页动效,从悬停反馈到滚动揭示和页面转场。每个案例都拆解行为和使用场景,并提供原生与 GSAP 两份可独立运行的 HTML。

在 GitHub 查看项目
裁剪展开clip-path: inset()

淡色为完整画面

现场演示

打开案例
D·01 裁剪展开滚动驱动
淡色为参照
0% · 起点
100% · 终点

现场演示裁剪展开 · 滚动驱动

从起始画面看起。

往下滚动,或拖动演示进度,比较同一个画面的前后状态。

22可操作的案例
4动效类别
2实现写法
44独立 HTML 示例
0原生示例运行时依赖

先操作。再看它为什么这样动。

四个入口覆盖常见的触发方式。每个案例都从一个能操作的演示开始,随后拆开行为和实现。

  • 现场演示
  • 效果定义
  • 使用场景
  • 实现要点
  • 原生示例
  • GSAP 示例

按触发方式,
浏览动效图鉴。

从触发动作入手。选一个案例,查看它怎么动、适合用在哪里,再打开详情试玩。

指针交互、滚动触发、滚动驱动、页面转场,共 22 个案例。

指针交互 · Pointer

  • 进入与离开共用同一对位置,方向相反。移动速度和缓动可以独立选择。

    • 链接悬停反馈
    查看案例
  • 进入和退出各自有一条固定路径,实际指针方位不改变路线。

    • 导航下划线
    查看案例
  • 比较坐标相对卡片中心的归一化偏移。绝对值相等时选水平轴,正中心取右侧。进与出分别判断。

    • 作品卡片揭示
    查看案例
  • 鼠标在固定热区内移动时,按钮视觉层持续跟随坐标,每轴最多偏移 12 px。移出、取消或失焦后回中,触屏点按和键盘操作都能激活按钮。

    • 主操作按钮
    查看案例
  • 移入即开播。动画播完才接受下一次移入,触屏和键盘可以用「播放一次」触发同一段动画。

    • 作品卡片的短反馈
    查看案例
  • 鼠标移入显示说明,移出收起;点击或键盘操作可以保持或收起说明。

    • 作品网格
    查看案例

滚动触发 · Scroll trigger

  • 向下穿过起点播放并记录已播放。向上返回或继续向下离开都保留完成状态。

    • 长文小节
    查看案例
  • 从下方回到区间仍保持揭示。只有向上穿过起点离开时,才回到起始状态。

    • 产品功能段
    查看案例
  • 从区间外进入就揭示,从任一边界离开就复位。快速跨过两条边界也落在区间外状态。

    • 可往返浏览的作品列表
    查看案例
  • 局部纵向滚动在章节边缘停靠,状态栏显示最接近的一节。到达两端后可以继续滚动正文。

    • 分章节浏览作品
    查看案例

滚动驱动 · Scroll driven

  • 拖动进度或滚动时,可见区域随进度双向变化。中间位置保留同一张图的中心。

    • 产品主图揭示
    查看案例
  • 进度由 0 走到 1 时,各图层移动预设距离。反向滚动时各层按原路径返回。

    • 分层叙事
    查看案例
  • 两幅图共用同一进度。50% 时裁剪侧显示原尺寸画面的中心,缩放侧显示半尺寸的完整画面。

    • 产品图的整体呈现
    查看案例
  • 进度决定视频显示哪一帧。向下滚动看后面的画面,向上滚动可以回看,停下后画面也停在当前位置。

    • 产品拆解或制作过程
    查看案例
  • 两幅图共用进度和展开范围。硬边在裁剪线处截断,软边在同一位置附近逐渐变透明。

    • 作品或产品图的显现
    查看案例
  • 近处门框、中景几何体和远处日轮在同一个空间里。视点沿水平方向移动,三者在画面中的相对位置和遮挡随之变化。

    • 空间叙事
    查看案例
  • 进度从 0 到 1 时立方体旋转并展开;反向操作时各面沿原路径复位。

    • 产品结构展示
    查看案例
  • 进度增加时日间场景向后退去,夜间场景向前进入;反向滚动恢复日间场景。

    • 章节叙事
    查看案例

页面转场 · View transition

  • 旧画面先被完整覆盖。到达覆盖点时替换内容,再移走遮罩。

    • 章节切换
    查看案例
  • 两个画面在固定舞台里叠放。旧画面退出的同时,新画面进入。

    • 步骤面板切换
    查看案例
  • 保留一个视觉锚点,让它沿起止位置和尺寸插值,其余内容在同一舞台中切换。

    • 从作品卡片进入详情
    查看案例
指针交互 · 行为示意对称过渡

图层沿同一条路径进入和返回。

试玩对称过渡链接悬停反馈浏览全部案例22 个案例 · 4 种触发方式

每次构建,
检查实际产物。

从类型检查到静态构建,再逐项读取生成的文件。运行 npm run verify 就能执行这套检查。下方回放一次校验通过的示例。

  1. check检查页面与组件类型

    通过 Astro 检查页面和组件的类型,定位属性、数据和脚本中的错误。

  2. build生成静态站点

    把首页、目录、案例详情和独立示例构建为可发布的文件。

  3. verify-build回查实际产物

    验证页面和示例是否齐全、本地链接和锚点是否可达,以及独立示例的脚本语法。

  4. gzip限制首页脚本体积

    递归统计首页加载的本地 JavaScript,gzip 后的体积必须在预算内。

verify · 示例回放

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 上限

硬边与软边,差在哪?

左右拖动分界线,比较同一幅图怎样在左侧直接截断,在右侧逐渐淡出。

硬边裁剪软边遮罩
两种效果都停在 70% 展开进度查看滚动软边遮罩

同一张图,两种状态。

拖动进度条,看左图从中心展开。右图始终显示完整画面。

裁剪帧
完整帧100%

裁剪展开

产品主图揭示。例如在产品页逐步放开局部细节,最后让读者看到完整轮廓。 可用 clip-path: inset() 从中心打开可见范围。

先试效果。再复制源码。

从裁剪展开开始。同一个动效可以用原生代码实现,也可以用 GSAP 的时间轴实现。

// 裁剪展开 · 原生

.art { clip-path: inset(calc((1 - var(--p)) * 50%)); }
打开独立示例 ↗

  1. 挑选一个案例

    按输入方式找动作。链接反馈属于指针交互,阅读过程中随进度改变的画面属于滚动驱动。

  2. 操作并比较

    先试玩演示,再看场景与行为定义。留意什么时候触发,反向操作时又会发生什么。

  3. 把示例带走

    打开原生或 GSAP 示例,复制完整 HTML,保存成文件后直接用浏览器打开。

键盘操作

移动到下一个控件Tab
切换案例或调整进度← →
跳到标签首尾Home / End
关闭演示Esc

挑一个动效。
试试看。

打开图鉴,先看看它怎么动,再决定它适合放在页面的哪里。

图层沿同一条路径进入和返回。

FormTempo · 裁剪展开