K2.02.3popover containment to current display设计研究

弹层位置需限定在当前屏内

别名: 弹层跨屏 · 菜单出屏 · bezel clipping · multi-monitor popover

概念解释

菜单、提示气泡、对话框、取色器、自动完成列表,都必须画在拥有它的那块屏里面。弹层按「整张虚拟桌面」去定位,就会骑在两块屏的边框上,或整块跑到邻屏——一边看不见,另一边以为没打开。

当前屏是指针所在、或锚点窗口所在的那一块,不是「坐标更大的那一块」。

机制

多块屏在坐标上相邻,在视觉上不相邻。中间是边框、缝、有时还有一块谁都没点亮的区域。Baudisch 等人把这条缝当成指点障碍来研究:光标能穿过去,视线不能把断开的两半当成同一个对象来读。菜单若一半在左屏、一半在右屏,文字在边框处被裁,命中区也断成两截。对话框若按屏幕中心的全局坐标去居中,可能出现在邻屏的中央,操作者盯着原窗口等待,以为指令被吞了。

弹层的寿命短、注意要求高,容错比主窗口更低。主窗口跨屏至少还占着标题栏可以再拖;气泡闪一下就没了,开错屏等于没开。定位应以锚点所在屏的可见矩形为笼子:先贴着锚点,放不下就改方向,再放不下就在本屏内滚动或压缩,绝不把溢出部分画到邻屏去「借空间」。

怎么研究

在双屏桌面上触发菜单、气泡和模态框,系统记录弹出矩形与各屏可见矩形的交集。经典做法是比较「按全局桌面坐标定位」和「按所属屏裁剪」:统计骑缝、整块跑到邻屏、以及操作者回头在原屏上寻找的次数。Baudisch 的 Mouse Ether、Drag-and-Pop 把边框当成不连续来处理,是同一条缝上的研究。

自变量:锚点距屏边的距离、两屏的相对位置(左右/上下)、定位策略。 因变量:弹层与所属屏的交集比例、骑缝次数、发现弹层的时间、误以为没打开的次数。

两屏按左右拼接去测,会漏掉「上屏 + 下屏」时垂直方向的骑缝;笔记本合上又打开外接屏时,「当前屏」可能瞬间变成一块已经不亮的屏。

边界

全屏独占(放映、游戏)里弹层本来就被锁在那一块画布上,问题转成「不要画到屏幕外」而不是「不要画到邻屏」。单屏无此问题。镜像模式两屏画面相同,弹层「跑到另一块」仍然看得见,但点的是哪一块仍可能乱。辅助功能的放大镜把局部像素再投到另一块屏上,弹层的「当前屏」要以用户正在看的那块为准,不能只认窗口坐标。

怎么落地

  • 计算弹层位置时只用所属屏的可见矩形当边界:优先贴锚点,溢出则翻转、移位或在本屏内缩小,禁止跨过屏缝。
  • 模态对话框在所属窗的那块屏上居中,不要按虚拟桌面的几何中心居中。
  • 验证:把窗口拖到每块屏的四条边上,打开菜单、气泡、对话框、日期选择器。任何一块弹层出现骑缝、出现在邻屏、或打开后原屏毫无变化,都算失败。

延伸

  • 同组K2.02.1 不同显示器的缩放与色彩不同 · K2.02.2 窗口跨屏移动需要重新适配
  • 相邻K2.08 多显示器与缩放 · E5.12 下拉菜单与子菜单
  • 站内检索popover containment · bezel · multi-monitor menu placement

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/K2.02.3