mcpField
S
state-changes

state-changes

github.com/dylantarre设计与 UI132495 次安装43 周前更新
代码仓库

关于 state-changes

面向界面设计的状态变化动画指南,说明如何将迪士尼动画原则用于元素状态转换。提供常见控件的时长、缓动和实现模式,并强调双向变化可逆。

主要功能

  1. 01将动画原则用于状态转换
  2. 02常见控件的时长与缓动建议
  3. 03Toggle 与手风琴实现模式
  4. 04强调状态变化的双向可逆性

适用场景

  1. 01设计 Toggle 开关动画
  2. 02制作复选框与单选按钮反馈
  3. 03实现手风琴或标签切换效果

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/dylantarre/animation-principles --skill state-changes

安装后在 Claude Code 中输入/state-changes确认已加载。

详细介绍

状态变化动画

将迪士尼的 12 条原则应用于不会离开的元素变换。

原则应用

挤压与拉伸:元素在扩展前先压缩。切换开关滑动前先挤压 5%。

预备动作:变化前先蓄势。扩展前稍微反向移动(2-3px)。

舞台设计:让变换始终围绕用户的关注点进行。不要让状态变化分散用户对交互位置的注意力。

连续动作与关键帧动作:定义精确状态。按钮有静止、悬停、激活、禁用四种状态,每种都经过精确设计。

跟随与重叠动作:各部分以不同速率变换。图标旋转后,标签再淡入。

慢入慢出:双向变化使用 ease-in-out:cubic-bezier(0.4, 0, 0.2, 1)。

弧线运动:旋转元素沿自然弧线移动。箭头围绕自身中心点旋转,而非线性移动。

次要动作:将主要变化与辅助动作结合。切换开关滑动 + 颜色变化 + 图标切换。

时长:

  • 微状态:100-150ms(复选框勾选、单选按钮填充)
  • 标准状态:150-250ms(切换开关、折叠面板)
  • 复杂状态:250-400ms(多部分变换)

夸张:状态变化时略微过冲。切换开关多移动 2px,然后回到稳定位置。

扎实绘图:变换过程中保持元素完整。不要进行破坏视觉一致性的扭曲。

感染力:状态变化应让人感到愉悦。用户是有意点击的——应让他们的操作获得回馈。

时长建议

状态变化时长缓动备注
复选框150msease-out勾选线条逐渐绘出
切换开关200msease-in-out略微过冲
单选按钮150msease-out从中心缩放展开
折叠面板250msease-in-out高度 + 旋转
标签页切换200msease-in-out指示器滑动
按钮激活100msease-out缩放至 0.97
卡片展开300msease-in-out所有属性同步变化

实现模式

.toggle {
  transition: all 200ms cubic-bezier(0.4, 0, 0.2, 1);
}

.toggle-knob {
  transition: transform 200ms cubic-bezier(0.34, 1.56, 0.64, 1); /* Overshoot */
}

.toggle.active .toggle-knob {
  transform: translateX(20px);
}

折叠面板模式

.accordion-content {
  display: grid;
  grid-template-rows: 0fr;
  transition: grid-template-rows 250ms ease-in-out;
}

.accordion.open .accordion-content {
  grid-template-rows: 1fr;
}

关键规则

状态变化是可逆的。从状态 A 变为状态 B 的动画应与反向动画互为逆过程。请测试两个方向。

评论

支持 Markdown