返回手势与逐层关闭的语义需一致
别名: 返回关浮层 · 系统返回 · 逐层弹出 · back dismiss
概念解释
系统返回键、侧滑返回、浏览器后退,在有浮层时会被人理解成「关掉我看见的最上面那一层」。返回即弹出一层(back as single-layer pop)要求手势与层栈对齐:按一次关顶层,再按一次关下一层,栈空了才离开当前页。一次返回把整栈拆掉或直接退出页面,语义就和看见的结构打架——眼睛还在顶层,手势却把底下的页也带走了。
机制
返回在操作系统里是「弹出导航栈顶」。浮层若宣称自己是一层,就应该进这个栈,至少在用户的模型里进这个栈。实现若把浮层做成页面上的绝对定位而不登记到历史,返回会跳过它们打到真正的上一页,顶层还挂在新页上,或整页换掉而层还在。反过来,若把每一次弹出都推进历史,返回会变成关层,这是对的,但分享链接和刷新会带上不该存在的历史条目。一致性指的是:在一次会话的操作上,用户看见几层,返回就弹几层;至于是否写入浏览器历史,要选一种并坚持,不能有的层进历史、有的层不进。侧滑返回若只绑页面、不绑层,会从层下滑出下一页,顶层被连根拔起。
怎么研究
在两层浮层打开时分别触发系统返回、侧滑、浏览器后退。记录每次动作关掉的是顶层、整栈还是整页。自变量:层是否写入历史、侧滑是否识别层。因变量:与「只关顶层」预期不符的次数、层残留在错误页面上。预期模型用事前访谈固定:「你按返回,以为会怎样」。
边界
桌面浏览器把后退当成站点导航的人,可能不愿意让后退关菜单;这时 Escape 关层、后退管页,两条通道要在界面上可区分。没有历史栈的单页嵌入 WebView 里,返回常被宿主应用抢走,需要与宿主约定层的优先权,否则应用返回会先退出 WebView。游戏或画布把返回绑成游戏内动作时,浮层出现期间应改绑为关层,离开浮层再还回去。
怎么落地
- 把当前临时层当作返回的第一接收者:一次返回只关顶层。
- 侧滑返回与按钮返回走同一套层栈,不要一个关层一个翻页。
- 选定层是否进入浏览器历史,全部层遵守同一选择。
- 验证:开两层,按一次系统返回。只关顶层才一致;整页走了或两层都在,语义就还没对齐。