菜单

缓动函数

相关源文件

缓动函数是 anime.js 动画引擎的关键组成部分,用于控制动画随时间进展的方式。它们定义了动画属性的变化速率或加速/减速曲线,从而实现自然而非线性的运动。本页介绍 anime.js 中可用的缓动函数、如何使用它们以及它们如何影响动画。

有关动画参数的详细信息,请参阅动画参数。有关使用时间轴创建复杂动画序列的详细信息,请参阅时间轴系统

缓动函数的作用

缓动函数接受线性输入值(通常为0到1,表示动画进度),并对其进行转换以创建各种类型的运动。通过操纵这种计时函数,您可以创建看起来更自然的动画,模拟现实世界的物理效果,如惯性、弹性和反弹。

来源:lib/anime.esm.js42-53

内置缓动类型

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 等)一起使用。

来源:lib/anime.esm.js48

基于参数的缓动

许多缓动函数可以通过参数进行自定义,以微调其行为。参数化缓动函数使用以下语法

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

缓动函数可视化

此图表显示了一些常见缓动函数与线性进展相比的进程曲线

该图表显示了不同的缓动函数如何转换线性输入值。例如:

  • 线性进展以恒定速率增加
  • 缓入(Ease-in)开始缓慢并加速
  • 缓出(Ease-out)开始快速并减速
  • 缓入缓出(Ease-in-out)结合了加速和减速
  • 弹性(Elastic)和弹跳(bounce)涉及过冲或反弹效果

来源:lib/anime.esm.js48

动画中的用法

基本用法

可以在动画参数中指定缓动函数

单个属性缓动

不同的属性可以使用不同的缓动函数

自定义函数

您可以提供自己的缓动函数

来源:lib/anime.esm.js115-117 lib/anime.esm.js427

内部实现

在 anime.js 中,缓动函数用于将动画的线性进度转换为缓动后的进度值。这在渲染过程中应用

在动画渲染过程中,缓动函数被应用于修改进度值

然后,得到的缓动进度用于在动画属性的起始值和结束值之间进行插值。

来源:lib/anime.esm.js894 types/index.js533

弹簧缓动

Anime.js 还支持基于弹簧的缓动,这在类型定义中有所提及,但在提供的代码中并未完全显示。弹簧缓动基于物理属性而非数学曲线,创建自然的弹簧状振荡。

基于弹簧的缓动可以为某些效果提供更物理精确的动画,特别是对于需要“稳定”到位元素的动画。

来源:lib/anime.esm.js53

性能考量

缓动函数在每个动画帧上计算,因此它们的复杂性可能会影响性能,尤其是在大量同时动画的情况下。一些注意事项:

  1. 复杂缓动函数(如弹性或弹跳)比简单函数(如二次或三次)需要更多的计算
  2. 自定义缓动函数应针对性能进行优化
  3. 参数化缓动函数可能需要额外的计算

对于包含许多元素的动画,请考虑使用更简单的缓动函数以保持流畅的帧速率。

来源:lib/anime.esm.js894-895

默认缓动

如果未指定缓动函数,anime.js 将使用 out(2) 作为默认缓动。这会创建平滑的减速效果,适用于大多数动画。

可以通过修改 anime.defaults.ease 属性来更改此默认值。

来源:lib/anime.esm.js426 types/index.js115