Skip to main content
ExodeUI

EXODEUI DESKTOP

A little space for good ideas.

Choose your platform to get the official ExodeUI installer.

Looking for Intel Mac or other builds? Explore the web studio or check all download options.

Prefer the browser? Try for free in your browser →
运动系统8 分钟阅读·Updated 2026 年 10 月·ExodeUI 团队

什么是运动系统? UI 团队实用指南

运动系统是决定产品如何运动的共享规则、令牌和组件。合一属于什么,如何管理,以及 ExodeUI 适合什么地方。

直接总结和定义

核心要点

运动系统是决定产品如何运动的共享规则、令牌、组件和代码集。它涵盖了持续时间、缓动、弹簧、编排和交互状态,因此团队可以重复使用批准的动作,而不是逐个屏幕地重建它。运动系统既是一个设计问题,也是一个管理问题:它需要一个所有者、一个事实来源和一条生产路径。

什么是运动系统?

运动系统是设计系统中描述运动的一部分。它回答了静态组件库无法解决的问题:菜单打开的速度有多快,按钮按下时如何反应,用户中断转换时会发生什么,以及哪些弹簧值属于哪个表面。输出不是样式指南页面。输出是一小组可重用的决策,设计人员和开发人员可以应用这些决策,而无需每次都发明新的动画。

运动系统属于什么

一个有用的运动系统有五个部分。跳过一个,系统就会变成一个没有人使用的文件文件夹。

Principles

解释产品个性的简短规则。例如:运动确认第一帧上的输入,或者大表面移动得比小表面少。

代币

持续时间、缓动和弹簧的命名值,例如motion.enter.fast或motion.spring.snappy。令牌使动议可审查并保持价值观一致。

图案

常见作业的可重用行为:输入、退出、展开、重新排序、拖动、关闭、成功和错误。

成分

已经使用这些模式的实时构建块,因此团队可以放入一个而不是阅读文档并重建它。

治理

谁可以更改系统、如何审核更改以及如何停用已弃用的动议。

运动系统 vs 设计系统 vs 运动代币

设计系统涵盖颜色、类型、间距、组件和使用规则。运动系统是其内部的运动层,它通常有自己的所有者,因为运动变化的原因与颜色不同。运动令牌是该层的最小单元:计时和物理的命名值。令牌库是必要的,但还不够。如果没有模式和实时组件,标记就变成了设计师在每个屏幕上以不同方式解释的数字列表。

为什么运动系统会失败

大多数运动系统的失败都是由于操作原因,而不是美观原因。令牌存在于与组件断开连接的文档中。批准的动议仅存在于开发人员无法运行的原型中。一个团队采用了该系统,而另一个团队则继续提供硬编码的持续时间。该系统没有所有者,因此它会漂移。解决这个问题意味着将系统放在已经发生工作的地方:设计文件中、组件库中和代码审查中。

如何管理运动系统

从一个小的、自有的表面开始,使系统成为简单的路径。

  • 为令牌选择一个真实来源并从设计文件和代码库链接到它
  • 按意图而不是按值命名标记:motion.exit.fast 比 Motion.200ms 更有用
  • 在添加更多令牌之前发送一小组模式
  • 通过前后记录查看运动更改(例如代码更改)
  • 跟踪重用:有多少新组件使用批准的模式而不是自定义计时
  • 按计划淘汰旧值,以便系统不会累积重复项

ExodeUI 适合的地方

ExodeUI 将运动保持在打开的 .exode 文件内,而不是在单独的规范中。布局、状态、时间线、弹簧物理、逻辑和输入一起存在,运行时包以 React、Vue、Svelte、Angular、Solid、React Native、SwiftUI 和 Flutter 播放文件。这为运动系统提供了工作参考:设计人员可以打开批准的组件,开发人员可以检查相同的文件,AI编码工具可以通过MCP服务器对其进行编辑。该文件不能替代治理。它只是为治理提供了一些具体的指向。

如何在一次冲刺中启动运动系统

审核您最常用的十个组件,并列出其中的每个持续时间、曲线和弹簧。将执行相同工作的值分组并命名组。选择涵盖大多数交互的五种模式。为每个模式构建一个参考组件,记录何时使用它,并将标记添加到您的设计和代码库中。然后通过新系统运行单个功能并测量它仍然需要多少自定义值。该数字是您下一个冲刺的基线。

生产实施片段

交互组件实现
import { ExodeUICanvas } from 'exodeui';

// The motion system lives in the .exode file. Your app supplies inputs
// and listens for events; it does not restate spring values in code.
export function SystemButton({ pressed, onConfirm }) {
  return (
    <ExodeUICanvas
      src="/system_button.exode"
      inputs={{ pressed }}
      onTrigger={(name) => name === 'confirm' && onConfirm()}
    />
  );
}

要记住的关键 Principle

  • 运动系统是设计系统的运动层,而不是原型视频的文件夹
  • 它需要原则、代币、模式、实时组件和治理
  • 没有使用规则的代币会变成每个团队都有不同解释的数字
  • 应像代码更改一样审查运动更改
  • ExodeUI 将运动、状态和逻辑保存在一个运行时可以播放的打开文件中

常见问题解答

相关指南和示例

交互式 UI 只需设计一次,交付同一个文件。

在 ExodeUI 中可视化地构建状态、弹簧物理和逻辑,并在 React、SwiftUI、Flutter 等中播放同一个文件。免费开始。

免费试用