Skip to content

Latest commit

 

History

History
84 lines (53 loc) · 11.2 KB

MOTION.md

File metadata and controls

84 lines (53 loc) · 11.2 KB

莱茵设计 · UX 与动效规范 V1.4

独立套件入口:http://127.0.0.1:18309/#motion。以下规则属于莱茵设计;宿主按实际交互选择配方。

2026-10-22,用户指定 Transitions.dev 作为UX与动画参考。本文件补充组件规范,保留Rhine Design的苔绿、暖白、三角几何与清晰文字。以下参数是本项目设计决定,不是对参考站时长或曲线的测量结果。

用户已进一步授权实现展台:/#motion目前提供12组可播放、重播、复位的真实示例,支持原速/4倍慢放、逐例减少动态及全局偏好。main组件共46个(npm0.3.0为40个);实验性配方仍限定于展台,后续按“展台评审 → 通用组件采用 → App接入”推进。

参考依据

  • 首页:分类导航、独立演示卡、主动播放按钮,以及示例名称和简短用途说明。实际浏览并点击卡片尺寸示例;未对全过程录屏或逐帧计时。
  • 动效目录:核对了菜单、弹窗、面板、状态文字、图标、骨架到内容、提示气泡与折叠等参考类型。目录提供的说明是选型依据,不代表逐项完成交互验收。
  • 示例详情与文档:预览、CSS与React视图并列,动效参数集中管理。Rhine Design继续使用自己的token与组件契约,不复制另一套参数体系。

UX:把变化做得可理解、可比较

  1. 动作有来源。 菜单、气泡从触发位置展开;碰撞避让改变位置时,动画方向随最终位置变化。按钮点击立即响应,视觉过渡不排队阻塞下一次操作。
  2. 前后是同一个对象。 展开说明保留原入口;加载后保留内容位置;刷新保留旧数据,失败留出重试。账号卡的关键详情继续常显,选择时不改变卡片大小。
  3. 一次只有一个视觉重点。 打开弹窗时处理遮罩与面板即可,不再让标题、字段和按钮逐个飞入;数据表不按行排队进入。
  4. 动效可被主动比较。 展台后续为每种动效提供静态起点、播放/切换、重播、参数说明及减少动态对照。重播只改变本地演示状态,不重新执行复制、请求、确认等真实动作。
  5. 解释适用条件。 示例卡写清“触发 → 变化 → 结束状态”,并显示已实现/设计候选;筛选只改变展台展示范围,不改变组件业务值。宽屏并排对照,窄屏单列,播放按钮位置稳定。

动效实验室已为12组配方提供上述播放控制、状态说明、参数和逐例减少动态开关;并排卡片可分别设置偏好作比较。既有组件目录保留普通交互示例,不给每个无动画组件添加播放按钮。

Rhine Design 动效映射

参考方向 Rhine Design使用方式与参数 当前状态 / 下一步
尺寸变化、折叠揭示 Disclosure用200ms高度过渡,内容不缩放;从当前高度反向,展开结束恢复自然高度;账号选择不触发尺寸变化 已有可中断Disclosure;不新增通用卡片变形
菜单与气泡 Menu/Popover/Combobox进入160ms、opacity与≤3px位移;位移朝向最终锚点方向,关闭即时归还焦点 实验室Menu/Popover已有四向候选;通用默认仍为原有动画,Combobox暂未单列方向演示
模态打开与关闭 Dialog/ConfirmDialog进入160ms淡入;表单文字保持原尺寸;关闭即时,焦点归还不等待视觉退出 已实现;继续保留现有语义和时长
加载到内容 初次加载沿用1400ms骨架轻脉冲,内容就绪即替换;180ms内容淡入,骨架占位匹配最终结构 实验室已实现合成加载衔接,未接业务;刷新不重播骨架
状态文字与图标切换 复制/保存完成后可试验120ms结果淡入;按钮保持尺寸、焦点与可访问名称;只在真实成功后显示勾选反馈 实验室已实现合成结果淡入;不会调用保存/复制,通用CopyButton行为不变
提示气泡 鼠标悬停延迟300ms,键盘focus无等待;进入160ms,离开/Escape即时关闭,可移入气泡阅读 已实现;不新增指针跟随或跨按钮滑动
通知 Toast进入180ms、≤3px;成功默认5秒,hover/focus/页面隐藏暂停;错误和警告常驻 已实现;不为了参考视觉新增通知堆栈
选项切换 Tabs指示与面板180ms,Switch滑块120ms;选中值立即更新,快速反向响应最新意图 已实现;保留现有下划线/滑块,不新增测量式滑动胶囊
数字变化 请求量、费用、配额直接显示最终值,tabular-nums稳定对齐;未知保持“—” 保留静态Metric,不采用滚轮、逐位翻转或从零计数

菜单方向候选:最终位于触发点下方时从translateY(-3px)归零,上方从translateY(3px)归零;左/右侧对称处理。只修改视觉transform,不干预Radix的定位计算或焦点管理。需要先在四向和视口边缘展台验收,再推广到组件。

播放控制的实现边界

入口为MotionGallery.tsx和展台动效CSS。每张卡初始静态,播放后可反复重播,复位清理双帧调度和合成结果计时;只重建该卡的演示内容,外层控制按钮保持焦点。加载/结果使用明确的700ms合成等待,不连接接口或系统剪贴板;慢放只改变视觉过渡,不延长这段等待。

弹窗使用现有Dialog和焦点限制。弹窗内“重播弹窗入场”重启CSS动画,不卸载内容或复制焦点树;减少动态时没有可重播的视觉动画。Toast演示使用duration=0便于观察,通用Toast默认5秒规则不变。Popover/Menu/Tooltip增加可选open/onOpenChange/side用于受控展示;原有调用方式和默认行为保持不变,受控时须成对提供open与onOpenChange。

四向效果只匹配.ds-motion-card内的实际Radix浮层,通过最终data-side选方向。Portal仍挂最近主题根,逐例减少动态和慢放均继承到浮层。新增配方不写进业务页或全局组件CSS;不把候选标签改为生产能力。

实验室小于760px视口时,左右方向请求优先转换为bottom,再由Radix决定上下避让。实测两侧都容不下300px气泡时,仅依赖左右flip可能仍越界;不以组件库已有碰撞功能代替窄窗验收。

参数与中断约束

  • 继续使用tokens.css:按下80ms、交互120ms、浮层160ms、面板180ms、通知/折叠200ms、进度/品牌240ms;Toast用面板180ms,Notice用通知200ms。正文与数值不做缩放或模糊。
  • --rhine-ease-standard为cubic-bezier(.2,0,0,1);Disclosure收起用现有exit曲线。--rhine-motion-distance为3px;新增配方先复用这些变量,不新增逐组件硬编码时长。
  • 动画仅声明需要变化的属性,不用transition: all。一般用opacity/transform;高度测量仅用于必要的Disclosure布局变化,不用整页高度动画掩盖布局跳动。
  • 快速反向从当前画面续接,旧动画取消;卸载清理动画和计时器。初始渲染、窗口恢复或普通重渲染不重复播放操作成功效果。
  • 语义先于装饰:checked、aria-expanded、真实结果和焦点即时更新;内容淡入不延迟可读状态。不要为了动画同时保留两份可聚焦控件或重复live播报。
  • 系统减少动态始终优先,手动减少动态也作用于Portal。关闭位移、脉冲和过渡后仍能识别加载、成功、失败;通知停留计时与视觉动画分别处理。

风格取舍

采用状态连续性、方向来源、短促反馈与可重播的展示方式。数字翻转、文字模糊、错误抖动、弹簧回弹、彩屑、液态菜单、3D倾斜及循环扫光不进入当前工作区规范;它们不帮助凭证选择或用量阅读。通用Logo保持240ms三角归位,不用装饰循环表示业务运行。用户另行要求的启动编排允许品牌专属720ms/18px旋转展开归位;仅在展台演示,实际App就绪不得等待完整分镜。

参考站是设计来源,组件复用入口仍是本仓库。当前CSS/Web Animations及Radix已能承载上述方案,本次不引入额外动画库、CLI、远程Builder或评分流程。未来需要复用外部源码时单独核对许可与依赖,参考授权不等于已取得代码授权。

轨道装饰的复用边界(0.6.0)

授权移交的 OrbitBackdrop 是独立艺术背景,保留原有环节点、曲线、发射箭头、光晕与透视;不修改通用 Logo、加载或交互配方。组件拥有 Canvas 绘制和生命周期,默认提供暂停 / 继续按钮;业务只组合布局,不另写一套动画。它不表示加载、进度或操作成功,普通业务刷新不触发重播。

系统、显式 prop 和祖先的减少动态偏好均可停帧,内层跟随系统不覆盖外层减少动态,reducedMotion={false} 不能覆盖系统偏好。窗口不超过 760px、页面隐藏、组件离屏或零尺寸时也保持静态;恢复沿冻结时间继续,不追赶。resize 静态重绘,DPR 上限为 2,卸载清理 rAF、监听器与 observers;Canvas 不可用时保留静态艺术和内容。

展台 /#orbit 使用真实公开组件,提供暂停 / 继续、局部重播、手动减少动态及系统 / 全局偏好继承。重播只重建艺术组件,外层业务内容不重建。此艺术背景不计入 /#motion 的 12 组配方;npm 0.5.0 及以前不包含它。API、三主题可读性与验收清单见轨道背景契约。

后续验收

每项候选先在真实组件展台展示,再更新实现状态。检查鼠标/键盘、快速反向、重复点击、加载成功与失败、长文本、400/520/880宽度、200%缩放、系统/手动减少动态;浮层额外检查四向避让与嵌套Escape。对比前后截图核对布局,对动画全过程录屏或采样核对时序,中间帧与最终帧分别记录。

首次内容切换不闪空白、不让操作目标跳位;刷新不丢旧数据;退出后无透明遮挡层和遗留焦点;无隐藏控件可Tab到。文档参数、DOM存在与单张截图不能代替完整动效或宿主原生平台原生验收。

2026-10-22展台验证:Chrome通过400/520/880/1200宽度、200%缩放、10组播放/复位、快速重播取消旧结果、四向位置/位移采样、菜单键盘、弹窗内重播保焦点与关闭归还、折叠中途反向、通知关闭、Tooltip Escape、逐例/全局/系统减少动态。采样确认4倍慢放的内容淡入720ms、反馈480ms、浮层640ms、折叠800ms及品牌960ms;未将合成浏览器结果扩展为原生或业务验收。

导航与流程动效(0.4.0)

新增抽屉与步骤两组示例,实验室现为12组。Drawer继承160ms浮层token,从右侧3px淡入;弹层内重播只重启CSS动画,焦点与内容不重建。Steps当前段使用180ms/3px进入,由业务校验推进。表单错误直接呈现并定位,无抖动效果。完整适用场景、减少动态与告警规则见交互规范。