# 桌面导航、标签页与窗口交互规范 ## 目录 1. 选择导航模型 2. 目的地、路由与状态模型 3. 导航、后退与焦点恢复 4. 自适应导航与应用外壳 5. 静态标签与文档标签 6. 未保存内容与关闭协议 7. 多窗口与窗口生命周期 8. 键盘与无障碍 9. 测试矩阵 10. 交付检查清单 ## 1. 选择导航模型 先根据用户心智模型选择,不按视觉偏好混用: | 模型 | 表达含义 | 典型呈现 | |---|---|---| | 顶级导航 | 在应用主要目的地之间切换 | 带标签的侧边或顶部导航 + 页面容器 | | 层级导航 | 进入对象或任务的下一级,并允许后退 | 路由栈、主从页面或显式导航控制器 | | 静态标签 | 在少量、固定、同一对象的同级属性页之间切换 | 不可关闭的标签或分段选择器 | | 文档标签 | 管理可创建、关闭、重排和可能移动到窗口的工作文档 | 可关闭、移动和溢出的文档标签 | | 多窗口 | 并行展示独立任务、文档或工具 | 具有独立状态容器的顶层窗口 | | 辅助面板 | 补充当前任务,不成为新的顶级目的地 | 侧面板、检查器或可停靠面板 | 不要使用标签页表示彼此无关的应用目的地,也不要用顶级导航伪装可关闭文档。层级导航、文档历史和编辑撤销是三种独立历史,不共用一个“后退”命令。 在编码前定义:目的地清单、稳定 ID、层级关系、可深链参数、进入/离开条件、后退语义、状态保留、加载策略、权限、未保存行为、多窗口所有权和恢复策略。 ## 2. 目的地、路由与状态模型 ### 稳定身份 - 使用路由/目的地 ID、文档 ID 和窗口 ID 标识状态,不使用导航项索引或当前标签位置。 - 路由参数只包含可序列化的最小身份;大型对象和敏感数据放在应用状态/服务中。 - 同一文档重复打开时明确激活现有标签、创建只读副本,还是允许多个编辑会话。 - 权限变化或对象删除后,历史记录不得导航到可操作的幽灵页面;显示可恢复状态或移除记录。 ### 每个页面保存什么 按产品价值决定保留:滚动位置、选中对象、筛选、展开节点、输入草稿、焦点目标、分页和子视图。持久业务数据与临时视图状态分开。 - 前进/后退通常恢复页面上下文,不重新创建空白页面。 - 刷新数据不应默认清空用户位置;无法恢复时将焦点放到语义最近的位置。 - 导航缓存需要容量和失效策略,不能无限保留页面、订阅、线程和敏感数据。 - 恢复失败时安全回到有效目的地并说明原因,不崩溃或显示空壳。 ## 3. 导航、后退与焦点恢复 ### 进入目的地 - 点击当前已激活的顶级导航项默认不重复压栈;需要“回到顶部/刷新”时显式定义。 - 导航启动后防止重复触发。异步加载显示当前目的地的骨架/进度,并忽略过期结果。 - 先确认离开条件,再切换选中导航项;被未保存状态阻止时恢复原导航视觉。 - 失败时保留上一页或显示可操作错误,不短暂显示目标页后再弹回。 ### 后退与前进 - 仅在有有效历史时启用后退;不要显示一个永远禁用的装饰按钮。 - `Alt+Left`/鼠标后退键按应用导航历史返回;不要撤销编辑或关闭文档。 - 后退前运行与直接导航相同的未保存协调器。 - 从详情返回列表时恢复筛选、选择、滚动和焦点;目标已删除时选择相邻项或列表容器。 - 深链首次进入没有应用内上一页时,后退回到合理的应用起点或关闭该任务窗口,规则必须明确。 ### 焦点 - 导航完成后把焦点放到页面标题、主内容或恢复的任务位置,而不是留在不可见导航项。 - 用户通过键盘选择导航项时保持可预测焦点;指针导航不应无必要抢走当前输入焦点。 - 弹层、对话框和辅助面板关闭后将焦点返回调用者或逻辑后继。 - 加载完成不自动把焦点从用户正在操作的其他控件抢走。 ## 4. 自适应导航与应用外壳 - 紧凑、中等、宽布局使用同一目的地和选择状态,只改变呈现方式。 - 导航面板折叠/展开不重建页面、不清空历史、不丢焦点。 - 紧凑模式保留可发现的打开导航入口;图标必须有文本/工具提示和无障碍名称。 - 顶级项保持稳定顺序。权限或功能开关改变时,移除无权项并处理当前目的地回退。 - 标题栏拖动区域不能覆盖导航按钮、搜索、标签关闭或窗口命令。 - 设置、账户和帮助等固定项与主要业务目的地分组,但仍参与明确的焦点顺序。 - 窗口变窄时优先折叠次要面板、重排主从内容,再隐藏低频命令;不把关键任务变成仅菜单可用。 ## 5. 静态标签与文档标签 ### 静态标签 - 用于少量固定同级页面,不提供新建、关闭、拖动或未保存标记。 - 标签切换应快速。内容加载有明显延迟时使用手动激活:方向键移动焦点,Enter/Space 激活。 - 标签名称简短且稳定;不要用仅图标标签承载关键分类。 - 切换后保留每页内部状态,除非数据刷新是明确操作。 ### 文档标签 每个文档标签维护稳定文档 ID、标题、脏状态、加载/错误、只读/冲突、固定状态和所属窗口。标签位置只是显示顺序。 - 单击激活文档;关闭按钮只关闭命中标签,不先意外切换并触发其他副作用。 - 支持关闭当前、关闭其他、关闭右侧等命令时准确处理固定标签和未保存标签。 - 关闭后优先激活最近使用或邻近标签,并将焦点放到合理位置。 - 重排不改变文档身份、保存目标、撤销栈或后台任务所有权。 - 标签太多时提供滚动、溢出列表或搜索;不能把标签压缩到无法识别。 - 标签标题变化保持关闭按钮位置稳定;脏状态使用符号并提供无障碍文本,不只变颜色。 - 双击标签、双击空白区和中键关闭仅作为加速路径,必须有显式按钮/菜单/键盘入口。 - 拖出新窗口是高级能力;需定义取消拖动、跨 DPI、失败回退和最后标签行为。 ### 标签键盘 - Ctrl+Tab/Ctrl+Shift+Tab 在文档标签间切换;是否按显示顺序或最近使用顺序要保持一致。 - Ctrl+W 关闭当前可关闭文档;不会绕过未保存检查。 - 标签条聚焦后使用方向键移动,Enter/Space 激活;Delete 关闭仅在产品明确采用时启用。 - 关闭后焦点移动到新激活标签或逻辑后继,不落到已删除对象。 ## 6. 未保存内容与关闭协议 所有离开路径调用同一关闭协调器:导航离开、后退、关闭标签、关闭窗口、退出应用、切换账户和外部打开另一文档。 推荐协议: 1. 收集受影响的脏文档/表单和正在提交的任务; 2. 无修改则直接继续;可自动保存则先安全保存; 3. 需要决策时显示具体对象和“保存 / 不保存 / 取消”; 4. 多文档退出支持逐项或“全部保存”,并报告失败项; 5. 只有全部必要保存成功或用户明确放弃后才完成关闭; 6. 取消关闭恢复原窗口、标签、导航选择和焦点。 - 保存失败不得关闭;保留内容并提供重试、另存或复制恢复数据。 - 后台任务与文档绑定时定义关闭后取消、继续后台或转移所有权。 - 进程崩溃恢复与正常未保存提示分开;恢复草稿不能覆盖较新的服务端版本。 - 不用“是否发生过键盘输入”判断脏状态,应比较规范化领域快照或命令状态。 ## 7. 多窗口与窗口生命周期 - 每个窗口具有明确任务、所有者和状态容器;不要依赖全局“当前窗口”。 - 应用级服务可以共享,页面选择、导航历史、焦点、文档视图状态通常按窗口隔离。 - 辅助窗口定义模态性、任务栏显示、始终置顶、最小化/恢复和父窗口关闭行为。 - 同一文档在多窗口编辑时定义单写者、协同、只读副本或冲突策略。 - 关闭父窗口前处理其拥有的对话框、弹层、未保存内容和后台任务。 - 保存窗口位置/尺寸/最大化/停靠布局;恢复时限制到当前显示器可用区域。 - 显示器移除、DPI 改变或窗口恢复失败时使用安全默认位置和最小可用尺寸。 - 最后一个窗口关闭是退出、留在托盘还是保留后台服务必须明确,不让任务静默终止。 ## 8. 键盘与无障碍 - 顶级导航、标签条和页面内容是不同复合区域;Tab 在区域间移动,方向键在区域内移动。 - 当前导航目的地与键盘焦点分别可见,并向无障碍 API 暴露选中/激活状态。 - 后退、关闭、新建标签、切换标签和窗口命令具有标准快捷键及菜单说明。 - 标签关闭按钮、仅图标导航项和窗口按钮提供准确名称;重复标签增加可区分上下文。 - 页面标题使用可导航语义;导航完成和错误加载时播报目的地变化,但不重复朗读整页。 - 高对比度、200% 缩放和长翻译下仍能识别活动目的地、活动标签、脏状态和关闭入口。 - 动效尊重系统减少动画设置;转场不延迟输入或导致前庭不适。 ## 9. 测试矩阵 至少验证: 1. 当前目的地重复点击、快速连续导航、加载失败和过期响应; 2. 后退/前进、深链首次进入、对象删除和权限变化; 3. 紧凑/宽导航切换、贴靠、标题栏命中和焦点保持; 4. 静态标签、文档新建/关闭/重排/溢出和重复打开; 5. 单个/多个脏文档的保存、不保存、取消和保存失败; 6. Ctrl+Tab、Ctrl+W、Alt+Left、方向键、Enter、Space、Delete 和 Shift+F10; 7. 多窗口共享文档、关闭父窗口、最后窗口和后台任务; 8. 窗口位置恢复、显示器移除、100%–200% DPI 和高对比度; 9. 屏幕阅读器对目的地、活动标签、脏状态、标签数量和加载结果的播报; 10. 原型与最终桌面实现的路由、关闭和恢复契约对照。 ## 10. 交付检查清单 - [ ] 已区分顶级导航、层级导航、静态标签、文档标签和多窗口。 - [ ] 所有目的地、文档和窗口使用稳定 ID,不依赖显示索引。 - [ ] 后退、刷新和导航失败能够保留或安全恢复用户上下文。 - [ ] 标签关闭、重排、溢出、快捷键和焦点后继明确。 - [ ] 所有离开路径共享未保存协调器,保存失败不会丢失内容。 - [ ] 多窗口的所有权、共享状态、关闭和最后窗口行为明确。 - [ ] 自适应布局不会重建状态或破坏标题栏命中。 - [ ] 键盘、缩放、高对比度和屏幕阅读器已验证。 - [ ] 原型与桌面实现使用同一路由和文档状态契约。