FINTECH INTERACTION MOTION SYSTEM · V10 · RELIABLE LOCAL
统一、克制、可信赖的金融交互动效规范
帮助产品、设计和研发共同判断什么时候使用动效、使用什么动效,以及如何一致地实现和验收。这不是单纯的动画展示库,而是一套服务于团队决策、设计、实现和验收的金融交互动效规范。
30标准模式
49图标动效
5金融动效原则
13时长 Token
4代码平台
标准动效模式
先按用户意图归类,再映射到统一的时长、曲线和代码实现。
支持名称、分类、标签和使用场景
图标动效
按实际使用场景组织,不按创建时间排序;保留原始矢量动画与实现文件,不计入标准动效模式数量。
图标动效
49 个图标动效 · 5 个使用场景
每项均可在线预览与重播,并分别下载独立 HTML 和 Lottie JSON。
支持按名称、使用场景和 Lottie 图层名称搜索
基础参数
默认直接使用基准值,只有在容器尺寸和运动距离明显变化时才允许调整。
Duration Tokens
统一节奏,避免每个业务分别使用 260 / 280 / 340ms。
instant100ms
fast160ms
focus180ms
standard220ms
exit240ms
depth280ms
container320ms
emphasis400ms
semanticQuick180ms
semanticStandard260ms
semanticEmphasis420ms
loadingLoop900ms
skeletonShimmer1500ms
Easing Tokens
按交互语义选择,而不是按设计师个人偏好选择。
金融动效原则
动效不是为了让界面看起来更活跃,而是帮助用户理解反馈、状态和层级关系。金融产品的动效应保持稳定、克制、清晰、连续和高效。
01
Stable 稳定
运动路径和终点明确,减少弹跳、回弹和无意义的尺寸变化。
推荐- 明确的进入和退出方向
- 柔和的 ease-out
- 状态完成后稳定停留
02
Restrained 克制
动效提供必要反馈,但不抢夺金额、状态和操作内容的注意力。
03
Clear 清晰
每个动作都应解释操作反馈、状态变化或空间关系。
推荐- 页面进入方向对应导航关系
- Sheet 从底部进入
- 状态 Icon 与结果文案同步
谨慎使用- 无来源的元素突然出现
- 所有转场都只使用淡入淡出
- 动效与业务状态无关联
04
Continuous 连续
前后状态之间应具有可追踪的关系,手势过程需要跟手且可中断。
推荐- 拖动过程 1:1 跟随
- 中断后从当前状态继续
- 进入与返回互为逆过程
谨慎使用- 手势结束后突然跳到终点
- 中断后重新从头播放
- 前后状态缺少连续关系
05
Efficient 高效
动效不能延迟用户完成任务,高频操作应短且轻量。
推荐- 点击后立即反馈
- 内容完成后立即可操作
- 高频操作使用较短时长
谨慎使用- 强制等待装饰动画
- 高频操作使用长动画
- 动效完成前禁止无关操作
执行补充:进入需要建立空间关系,退出通常应更快;所有模式必须支持中断、逆向过程和 prefers-reduced-motion,关闭位移与缩放后仍通过颜色、描边或透明度传达状态。
什么时候应该使用动效?
先判断动效是否解决真实的交互问题,再选择具体模式。
适合使用动效
- 用户需要确认操作是否已经生效
- 需要解释页面或浮层之间的空间关系
- 需要表达加载、成功、失败或处理中状态
- 静态变化容易被用户忽略
- 需要保持手势与界面的连续关系
- 需要引导用户关注真正重要的信息变化
不建议使用动效
- 动效没有提供新的信息
- 只是为了让页面看起来更丰富
- 会延迟用户的下一步操作
- 多个区域同时运动并争夺注意力
- 静态状态已经足够清楚
- 会放大等待、失败或金融风险带来的焦虑
Motion Advisor
当交互问题已经明确,但还不能确定应该选择哪个标准模式时使用。
按交互意图查找模式
通过操作反馈、连续拖动、加载状态、容器层级和页面导航等意图,辅助定位现有 Pattern。它是决策辅助工具,不替代前面的原则判断、基础参数和标准模式。
代码输出与引用
点击任意动效卡片,可查看 CSS / Web、iOS / SwiftUI 和 Android / Compose 的实现参考;复杂 Web 动效继续保留 GSAP 与 React 示例。
引用建议
产品代码优先引用语义 Token,不在业务页面中直接散落毫秒值和贝塞尔参数。
:root {
--motion-duration-instant: 100ms;
--motion-duration-fast: 160ms;
--motion-duration-focus: 180ms;
--motion-duration-standard: 220ms;
--motion-duration-exit: 240ms;
--motion-duration-depth: 280ms;
--motion-duration-container: 320ms;
--motion-duration-emphasis: 400ms;
--motion-duration-semantic-quick: 180ms;
--motion-duration-semantic-standard: 260ms;
--motion-duration-semantic-emphasis: 420ms;
--motion-duration-loading-loop: 900ms;
--motion-duration-skeleton-shimmer: 1500ms;
--motion-ease-change: cubic-bezier(.2, 0, 0, 1);
--motion-ease-enter: cubic-bezier(.32, .72, 0, 1);
--motion-ease-exit: cubic-bezier(.4, 0, 1, 1);
--motion-ease-toast-enter: cubic-bezier(.2, .78, .2, 1);
--motion-ease-semantic-enter: cubic-bezier(.25, .8, .25, 1);
--motion-ease-semantic-change: cubic-bezier(.4, 0, .2, 1);
--motion-ease-linear: linear;
}