E5.13.1context menu设计

菜单内容随选中对象变化

别名: 上下文菜单 · 对象相关菜单 · right-click menu

概念解释

上下文菜单(context menu)是在某个对象上唤出的、内容由该对象决定的命令表。选中一张图片,出现裁剪和设为封面;选中一段文字,出现复制和评论。菜单不是一份全局命令的缩小版,而是「对这个对象此刻能做什么」。对象一变,表就应变;对象没变,表不该突然换成另一套。

机制

人把菜单当成对该对象的动词表。唤出位置(在对象上右击、长按、二次点击)把「作用对象」钉死,菜单里的每一项默认吃进这个对象,不必再选范围。这比先从顶栏找命令再确认作用在谁身上更短。正因为范围是靠对象定的,菜单必须随对象类型、状态和权限过滤:文件夹没有「设为封面」,已归档的会话没有「回复」,只读对象的「删除」不该还像可点。过滤不足时,人选了一项才被告知不可用,对象—动词匹配在事后才失败。过滤过度时,两项看起来一样的对象弹出完全不同的表,人会以为点错了对象。

多选会改变这张表的语义:要对交集负责(所有选中对象都能做的动词),还是对第一个对象负责,必须一致。混进与对象无关的全局项(设置、帮助)会把上下文菜单又变回普通菜单,作用范围变得不清楚。

边界

桌面空白处的上下文菜单作用对象是画布或窗口,不是「没选中」。触屏上若没有稳定的对象命中,唤出的表会不知道吃谁,不如用对象内的明确按钮。实时协作里对象状态在菜单打开后变化(别人锁了文件),打开时合法的项可能在点下去时已非法,需要在执行前再判一次。键盘唤出应对准当前焦点对象,而不是指针底下那一个,否则键鼠模型会打架。

怎么落地

  • 按对象类型和当前状态生成菜单,只放对该对象有意义的动词;不可用项要么去掉,要么留下并立刻说明原因,不要等点下去才失败。
  • 多选时以交集为默认动词集,并在菜单标题或第一行标明作用在几个对象上。
  • 不要把全局导航或帮助塞进对象菜单;那些有自己的入口。
  • 验证:对两类对象、同一对象的两种状态、以及多选,各唤出一次,对照动词是否只覆盖该范围。任何「点了才说不能做」或「两个看起来一样的对象表完全不同且无说明」,都是上下文没钉住。

延伸

  • 同组E5.13.2 触屏上依赖长按,与其他手势竞争 · E5.13.3 菜单内功能需在其他位置也可达
  • 相邻E5.12 下拉菜单与子菜单 · E5.18 导航项的权限可见性
  • 站内检索context menu · object-action · right-click

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/E5.13.1