E4.16.2per-layer dismiss path设计研究

每一层都需要独立的关闭路径

别名: 逐层关闭 · 独立关闭 · 浮层逃生 · layer dismiss

概念解释

栈里的每一层都必须能被单独关掉,而不必关掉它下面那一层,也不必把整个栈清掉。逐层独立关闭(per-layer dismiss path)是逃生口要开在这一层自己身上:弹出层有点外侧或 Escape,抽屉有遮罩,对话框有取消。缺了这一层的口,人只能拆下面的层,或者卡死。它不管栈允许多深,只管每一层自己怎么离开。

机制

层是不同寿命的承诺。弹出层可能只活一次点击,对话框要活到问题被回答。关闭路径若只做在最外或只做在最底,寿命短的层会被迫跟着寿命长的层一起死,或寿命长的层被一次误关带走。独立路径让顶层先走、下层仍在,符合「我只想收起这份菜单,对话还没答完」。路径还要够被发现:只有程序能关、用户看不见控件,等于没有路径。各层的关闭命中区不能重叠到一次点击关掉两层——看起来像独立,实际是连锁。独立不是「每层都要一个一模一样的叉」,而是每层都有一条与自己类型相符、只作用于自己的离开方式。

怎么研究

搭两层栈(例如对话框上再开弹出层),分别拿掉顶层关闭、拿掉下层关闭、或让一次点击连锁关两层。记录能否只关顶层、是否误关下层、是否卡住。自变量:各层关闭控件是否存在、命中区是否重叠。因变量:单层关闭成功率、连锁误关。连锁条件下下层被意外关掉的比例应最高。

边界

顶层是系统框时,应用给不了它关闭路径,那是系统的口。某一层处于不可中断的提交中,关闭路径可以暂时拒绝,但要说为什么,并在结束后恢复。关闭下层若逻辑上必须先关上层(上层是下层的孩子),应先自动收起上层再关下层,对用户仍是一次明确的「关当前」,而不是一次点击炸两层。

怎么落地

  • 为每一种临时层登记一条只关自己的路径,并保证它在该层成为顶层时可用。
  • 关闭命中区不要贯穿到下一层。
  • 顶层关掉后,下层应仍在并重新获得自己的关闭路径。
  • 验证:开两层,只关上面那层。下面那层还在,路径才独立;两层一起没,就是连锁。

延伸

  • 同组E4.16.1 叠加层数需要上限 · E4.16.3 返回手势与逐层关闭的语义需一致
  • 相邻E4.10 模态对话框 · E4.09 抽屉
  • 站内检索dismiss path · light dismiss · close overlay

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/E4.16.2