缓动函数是 anime.js 动画引擎的关键组成部分,用于控制动画随时间进展的方式。它们定义了动画属性的变化速率或加速/减速曲线,从而实现自然而非线性的运动。本页介绍 anime.js 中可用的缓动函数、如何使用它们以及它们如何影响动画。
有关动画参数的详细信息,请参阅动画参数。有关使用时间轴创建复杂动画序列的详细信息,请参阅时间轴系统。
缓动函数接受线性输入值(通常为0到1,表示动画进度),并对其进行转换以创建各种类型的运动。通过操纵这种计时函数,您可以创建看起来更自然的动画,模拟现实世界的物理效果,如惯性、弹性和反弹。
Anime.js 提供了一套全面的内置缓动函数,可分为以下几组
| 缓动类型 | 可用变体 | 效果 |
|---|---|---|
| 线性级 | linear | 恒定速度,无加速 |
| Quad (二次) | inQuad, outQuad, inOutQuad | 二次方 (t²) 加速 |
| 立方 | inCubic, outCubic, inOutCubic | 三次方 (t³) 加速 |
| Quart (四次) | inQuart, outQuart, inOutQuart | 四次方 (t⁴) 加速 |
| Quint (五次) | inQuint, outQuint, inOutQuint | 五次方 (t⁵) 加速 |
| 正弦 | inSine, outSine, inOutSine | 正弦加速 |
| Expo (指数) | inExpo, outExpo, inOutExpo | 指数加速 |
| Circ (圆形) | inCirc, outCirc, inOutCirc | 圆形加速 |
| 缓动类型 | 可用变体 | 效果 |
|---|---|---|
| 返回 | inBack, outBack, inOutBack | 轻微过冲效果 |
| 弹性 | inElastic, outElastic, inOutElastic | 弹簧般的振荡 |
| 弹跳 | inBounce, outBounce, inOutBounce | 弹跳效果 |
| 缓动类型 | 描述 |
|---|---|
steps | 创建具有离散跳跃的分步动画 |
cubicBezier | 由三次贝塞尔控制点定义的自定义曲线 |
irregular | 随机的非线性计时函数 |
来源:lib/anime.esm.js48 types/index.js148-156
大多数缓动函数(线性除外)都可以与三种不同的计时模式一起使用
方向修饰符可与通用计时参数(in, out, inOut)一起使用,也可与特定缓动类型(inQuad, outExpo 等)一起使用。
许多缓动函数可以通过参数进行自定义,以微调其行为。参数化缓动函数使用以下语法
functionName(param1 = defaultValue, param2 = defaultValue)
| 缓动函数 | 语法 | 描述 |
|---|---|---|
| 通用幂函数 | in(p = 1.675), out(p = 1.675), inOut(p = 1.675) | 控制曲线的指数/强度 |
| 返回 | inBack(overshoot = 1.70158) | 控制过冲量 |
| 弹性 | inElastic(amplitude = 1, period = .3) | 控制振荡的振幅和周期 |
| 不规则 | irregular(length = 10, randomness = 1) | 控制点数和随机性水平 |
| 三次贝塞尔 | cubicBezier(x1, y1, x2, y2) | 控制贝塞尔曲线的形状 |
| 步数 | steps(steps = 10) | 控制离散步数 |
anime.js 中的默认缓动函数是 out(2),它创建了一个二次方缓出效果。
来源:lib/anime.esm.js48 lib/anime.esm.js426
此图表显示了一些常见缓动函数与线性进展相比的进程曲线
该图表显示了不同的缓动函数如何转换线性输入值。例如:
可以在动画参数中指定缓动函数
不同的属性可以使用不同的缓动函数
您可以提供自己的缓动函数
来源:lib/anime.esm.js115-117 lib/anime.esm.js427
在 anime.js 中,缓动函数用于将动画的线性进度转换为缓动后的进度值。这在渲染过程中应用
在动画渲染过程中,缓动函数被应用于修改进度值
然后,得到的缓动进度用于在动画属性的起始值和结束值之间进行插值。
来源:lib/anime.esm.js894 types/index.js533
Anime.js 还支持基于弹簧的缓动,这在类型定义中有所提及,但在提供的代码中并未完全显示。弹簧缓动基于物理属性而非数学曲线,创建自然的弹簧状振荡。
基于弹簧的缓动可以为某些效果提供更物理精确的动画,特别是对于需要“稳定”到位元素的动画。
缓动函数在每个动画帧上计算,因此它们的复杂性可能会影响性能,尤其是在大量同时动画的情况下。一些注意事项:
对于包含许多元素的动画,请考虑使用更简单的缓动函数以保持流畅的帧速率。
如果未指定缓动函数,anime.js 将使用 out(2) 作为默认缓动。这会创建平滑的减速效果,适用于大多数动画。
可以通过修改 anime.defaults.ease 属性来更改此默认值。