弹簧动画效果是:欺骗我们的大脑,让我们以为某物真的在移动

本质上是在模拟一个带弹簧和阻尼的物理系统

参数

概念含义AndroidiOS UIKit / SwiftUIWeb / CSS
目标值动画最终要到达的位置或状态finalPosition / targetValueanimations block / state 最终值CSS 属性最终值,如 transform, opacity
刚度弹簧“硬不硬”,决定拉回目标的力度stiffnessstiffness / responseCSS 原生没有;JS spring 库通常有 stiffness
阻尼消耗运动能量,决定是否回弹、震荡多久dampingRatiodampingRatio / dampingFraction / dampingCSS 原生没有;可用 cubic-bezier 模拟
质量物体惯性大小,质量越大越“沉”通常不暴露massCSS 原生没有;JS spring 库可能有
初速度动画开始时已有的运动速度setStartVelocity()initialVelocityCSS 原生没有;JS 动画库可传 velocity
动画时长动画持续多久通常由物理收敛决定UIKit 常有 duration;SwiftUI 常用 responsetransition-duration / animation-duration
回弹程度超过目标值后再回来的明显程度降低 dampingRatio 会更弹降低 dampingFraction / dampingRatio 会更弹用 overshoot 的 cubic-bezier 或 JS spring
停止阈值小到看不见时就认为动画结束minimumVisibleChange / visibilityThreshold多数由系统内部处理CSS 原生无;JS 库可能有
常用 API平台提供的动画入口SpringAnimation / Compose spring()UIView.animate / UISpringTimingParameters / SwiftUI .spring()CSS transition / animation / WAAPI / JS 动画库
设计意图含义AndroidiOSWeb CSS / JS
更快更快靠近目标状态提高 stiffness降低 response 或提高 stiffnessCSS 缩短 duration;JS 提高 stiffness
更软运动更慢、更柔和降低 stiffness提高 response 或降低 stiffnessCSS 拉长 duration;JS 降低 stiffness
更弹有明显超调和回弹降低 dampingRatio降低 dampingFraction / dampingRatioCSS 用 overshoot cubic-bezier;JS 降低 damping
不回弹快速到达目标但不明显超调dampingRatio ≈ 1dampingRatio ≈ 1CSS 用 ease-out;JS 提高 damping
更拖沓慢慢靠近目标,像阻力很大提高 dampingRatio 或降低 stiffness提高 damping / dampingRatioCSS 拉长 duration;JS 提高 damping
手势释放自然继承用户拖拽时的速度设置 startVelocity设置 initialVelocityJS 传 velocity;CSS 不适合