跳到主要内容

Spring Animation 弹性动画


简介

一种在 UI 设计动画系统中比较常见的动画效果。它使用弹簧模型来模拟物理弹性,从而实现逼真的弹动效果。

Spring Animation 通过模拟物理力学原理,可以让动画更加平滑、自然,这与用户日常生活中的物理弹性相符,从而提高交互的体验度。

使用 Spring Animation 制作的动画可以使界面元素运动轨迹变得更加生动,更加有趣。

动画参数

可以设置动画元素的 质量 Mass张力 Tension摩擦力 Friction等参数,模拟自然、物理的效果。

表格视图查看
Property
属性
Default 默认
Description 描述Origami 支持
mass质量1质量,决定物体的惯性大小,值越大,惯性越大。
tension张力170弹簧能量的负载。
friction摩擦力26弹簧的阻力。
clamp夹紧false当为真时,一旦弹簧超过其边界就停止弹簧。
precision精确0.01在我们认为动画值“存在”之前,动画值与最终结果的接近程度,这对于 spring 弹簧 和 decay 衰减 动画很重要。
velocity速度0初始速度。
easing缓动t => t默认情况下是线性的,你可以使用任何你想要的缓动。
damping阻尼1阻尼比,它决定了弹簧如何减速。仅在frequency定义时有效。默认为1
progress进度0当与 一起使用时duration,它决定了从缓动函数开始的距离。持续时间本身不受影响。
duration持续时间undefined如果 > 大于 0 将切换到基于持续时间的动画而不是弹簧物理,值应以毫秒为单位表示(例如duration: 250持续时间为 250 毫秒)。
decay衰减undefinednumber的衰减率。如果通过true默认为 0.998。
frequency频率undefined频率(以秒为单位),它规定了在没有阻尼存在时每秒的反弹次数,即控制弹簧的震动频率,值越大表示频率越高。
定义时, tension 从这里派生, frictiontensiondamping派生。
round四舍五入undefined当动画进行时,四舍五入到该数字的最接近的倍数。fromto的值永远不会四舍五入,传递给动画值的set方法的任何值也是如此。
bounce反弹力undefined当高于0时,弹簧将反弹而不是超过目标值。
restVelocity初始速度undefined动画开始时物体的初始速度,通常情况下,restVelocity 被设置为零,这意味着物体是静止的,动画会从静止状态开始。但是,如果想要模拟更加复杂的动态效果,也可以将 restVelocity 设置为非零值。

Mass 质量

默认值:1 |   Origami 支持:

描述:代表物理系统中的质量,也就是动画元素在运动时的质量值。也决定物体的惯性大小,值越大,惯性越大。

这个参数用来影响动画运动的速度,当质量增加时,动画速度就会减缓;当质量减少时,动画速度就会加快。

通过控制质量,可以使动画元素运动呈现出更加真实的物理效果。

Tension 张力

默认值:170 |   Origami 支持:

描述:代表了动画弹簧的紧度。Tension 越大,弹簧的紧度就越高,弹性就越强;反之,Tension 越小,弹簧的紧度就越低,弹性就越弱。

Tension 决定了弹簧动画的弹力大小,也就决定了弹性动画的长度和速度。

因此,如果要制作出具有特定弹性的动画效果,通常需要通过调整 Tension 参数来实现。

Friction 摩擦力

默认值:26 |   Origami 支持:

描述:Friction 参数控制动画的摩擦力,它代表动画的摩擦力。较大的 Friction 值会导致动画速度减缓,较小的 Friction 值会导致动画速度加快。

Clamp 夹紧

默认值:false |   Origami 支持:

描述:当为真时,一旦弹簧超过其边界就停止。用于限制动画的结果值在一个特定的范围内。它的作用是防止某些动画的结果值过大或过小,从而影响整体用户体验。

在使用 clamp 参数时,您可以指定动画的结果值的最小值和最大值。如果动画的结果值超出了这个范围,那么它将被限制在范围内。

Precision 精确值

默认值:0.01 |   Origami 支持:

描述:precision 参数是用来控制动画计算精度的。它表示动画每帧更新的次数,设置的数值越高,计算精度就越高,动画就越流畅,但是也会消耗更多的处理资源。

一般来说,precision 的默认值就能满足大多数场景的需求,除非特殊情况需要,否则不需要更改它的值。

Velocity 速度

默认值:0 |   Origami 支持:

描述:velocity 参数指定了动画开始的初始速度。这个参数用于控制动画的快慢程度,并且决定了动画是否需要弹跳。

如果 velocity 参数设置的值较大,动画将以更快的速度完成,如果设置的值较小,动画将以更慢的速度完成。

Easing 缓动

默认值:t => t |   Origami 支持:

描述:默认情况下是线性的,你可以使用任何你想要的缓动。

easing 参数是一个可选参数,它控制了动画的时间复杂度,可以影响动画的表现。一般来说,easing 参数可以让动画看起来更自然,使其表现更真实。

不同的 easing 参数可以模拟不同的物理效果,例如弹簧的形态,重力,惯性等。通过选择适当的 easing 函数,可以让动画看起来更有趣,更有吸引力。

Damping 阻尼

默认值:1 |   Origami 支持:

描述:指的是振动的阻尼系数。它决定了弹簧如何减速,它越高,振动就越快消失。

仅在  frequency定义时有效。默认为 1

这个参数用于控制动画中物体的振动,从而影响动画的效果和感觉。

它与其他参数,如 Tension 和 Friction,一起决定了动画的表现方式。适当的调整 damping 参数可以让动画更逼真和有趣。

Progress 进度

默认值:0 |   Origami 支持:

描述:动画当前的进度状态。通常情况下,进度范围为 0 到 1,其中 0 表示动画的起始位置,1 表示动画的结束位置。

通过跟踪进度的变化,研发人员可以对动画的每一帧进行更细致的控制。

Duration 持续时间

默认值:undefined |   Origami 支持:

描述:用于控制动画的持续时间。它是动画的持续时间,以秒为单位。通过设置不同的 duration,可以调整动画的速度,让动画变得更快或更慢。

Decay 衰减

默认值:undefined |   Origami 支持:

描述:用于控制动画衰减率,即number的衰减率。如果定义为true,则默认为 0.998

动画衰减率是指动画速度减缓的速度,当动画速度降低到一定程度时动画会停止。通过调整 Decay 参数,可以控制动画衰减的快慢,从而达到合适的动画效果。

Frequency 频率

默认值:undefined |   Origami 支持:

描述:频率(以秒为单位),它规定了在没有阻尼存在时每秒的反弹次数,即控制弹簧的震动频率,值越大表示频率越高。

定义时, tension 从这里派生, frictiontensiondamping派生。

Round 四舍五入

默认值:undefined |   Origami 支持:

描述:当动画进行时,四舍五入到该数字的最接近的倍数。fromto的值永远不会四舍五入,传递给动画值的set方法的任何值也是如此。

Bounce 反弹力

默认值:undefined |   Origami 支持:

描述:表示动画的回弹效果。这个参数影响动画结束时物体回弹的强度。

设置 bounce 参数为值更大的数字会导致动画有更强的回弹效果,而设置较小的数字则回弹较少。

通常,bounce 参数默认为0,表示没有回弹效果。

restVelocity 初始速度

默认值:undefined |   Origami 支持:

描述:代表目标位置的初始速度。在 Spring Animation 中,restVelocity 参数用于设置动画弹性的初始速度。

该参数可以帮助控制动画的开始和结束行为,从而使动画看起来更自然。

设计模块

基于 Origami,封装好的动画模块。

Spring Animation

Spring Animation 是一种弹性动画,它是一种动态动画技术,用于生成动态、有弹性的运动效果。

这种动画可以很好地模拟物理动态效果,比如物体的弹跳或震荡。

Spring Animation 通常用于生成动态页面元素的效果,如按钮点击或弹出菜单等。

Spring Animation

  • Number0
  • PresetDefault
  • Tension170
  • Friction26
  • Mass1
  • Gesture Active
  • Gesture Velocity0
  • 0

设计参数

参数
Number一个数值,表示动画开始和结束
Preset预设的动画参数类型,默认为 Default
Tension弹簧有多大的张力,默认为 130
Friction对弹簧施加多少摩擦力,默认为 18
Mass动画对象的质量,默认为 1
Gesture Active手势激活,默认为假
Gesture Velocity手势速度,默认为 0

参数预设

快捷的调用和设置动画参数,提升设计效率和标准。

预设
含义
config.default默认{ mass: 1, tension: 170, friction: 26 }
config.gentle柔和{ mass: 1, tension: 120, friction: 14 }
config.wobbly摆动{ mass: 1, tension: 180, friction: 12 }
config.stiff生硬{ mass: 1, tension: 210, friction: 20 }
config.slow缓慢{ mass: 1, tension: 280, friction: 60 }
config.molasses粘性{ mass: 1, tension: 280, friction: 120 }

开发适配

框架方法说明设计支持
React Nativespring()Reacct Native Spring Animation
iOSUISpringTimingParametersApple Spring Animation
Android----
Web----
Flutter--
Taro----

Spring Bounciness Animation

Spring Bounciness Animation 是一种弹性动画,通常用于表现物理上的弹性模拟,例如对象在被拖动时的弹回效果,对象在碰撞时的弹开效果等。

通常可以通过设置 "bounciness" 参数来控制弹性的大小。

Spring Bounciness Animation

  • Number0
  • Bounciness5
  • Speed10
  • Progress0

设计参数

参数
Number一个数值,表示动画开始和结束
Bounciness弹力,默认为 5
Speed速度,默认为 10

开发适配

框架方法说明设计支持
React Nativespring()Reacct Native Spring Animation
iOSUISpringTimingParametersApple Spring Animation
Android----
Web----
Flutter--
Taro----

Spring Damping Animation

Spring Damping Animation 通常用于创建滚动和触摸交互动画,因为它模拟了物理对象在滚动或拖动过程中的弹性和阻尼效果。

这种动画可以帮助提高用户体验,因为它们比普通的线性动画更加自然和有趣。

Spring Damping Animation

  • Number0
  • Duration0.4s
  • Damping10
  • Stiffness100
  • Mass1
  • Velocity0
  • Value0

设计参数

参数
Number一个数值,表示动画开始和结束。
Duration动画的持续时间。
Damping施加于弹簧运动的阻尼力。该值用于计算阻尼比。
Stiffness弹簧刚度系数。较高的值对应于较硬的弹簧,可为移动的物体产生较大的力。
Mass动画对象的质量,默认为 1。
Velocity动画的速度。

开发适配

框架方法说明设计支持
React Nativespring()Reacct Native Spring Animation
iOSUISpringTimingParametersApple Spring Animation
Android----
Web----
Flutter--
Taro----

相关参考

Reacct Native Spring Animation

Pop framework for iOS

Rebound for Android

Rebound JS for the web

Apple Spring Animation Parameters

Androind Spring Animation