C1.09.1Marquee selection start region设计

框选起点必须落在空白区,否则与拖动对象冲突

别名: 框选 · 橡皮筋选择 · marquee selection

概念解释

框选起始区(marquee selection start region)规定橡皮筋选择只能从画布空白处开始;从对象上按下则保留给选中或拖动该对象。这个分工避免同一按下—移动动作既可能移动一个对象,也可能创建选择框的歧义。

机制

拖动手势的首个落点提供对象语义:落在对象上通常表示操作对象,落在空白处表示操作空间。系统据此在移动后进入对象拖动或绘制选择框。若两种行为都允许从对象起点发生,距离阈值无法告诉系统用户想移动对象还是圈住周围对象。

再往下一层看命中判定本身是怎么做的:系统在按下的瞬间做一次自上而下的命中测试,按渲染层级从最上层对象开始查询,第一个几何或视觉上包含该点的对象即为"落在对象上";此后即便对象在拖动过程中移出光标下方,分支已经确定,不会中途改判。这带来两个后果:一是对象的可点击范围往往比其视觉边界宽(见热点与命中判定),恰好落在物体半透明边缘或抗锯齿像素上时,命中测试仍会判定为"在对象上",这是刻意放宽而非误差;二是命中测试只在按下这一刻发生一次,所以只要按下时判为空白区,哪怕之后手指划过大量对象,仍然走框选分支,不会中途切换为拖动。

边界

全选模式、锁定对象或图层编辑器可采用不同规则,但应明确显示当前模式。对象填满画布时缺少空白起点,框选会不可达;此时需要菜单、修饰键或临时空间。触屏也可能没有足够精确的空白落点——手指接触面积本身就有若干毫米宽,紧密排列的图标之间几乎不存在能稳定命中"空白"的像素带,此时框选在触屏上实质上不可用,必须换成长按进入选择模式等替代路径。

怎么落地

  • 将对象起点稳定地解释为对象操作,空白起点解释为空间选择,命中测试只在按下瞬间执行一次。
  • 在对象密集或无空白区域提供明确的框选入口(如工具栏的"选择模式"按钮),不要依赖用户找到一条空白缝隙。
  • 验证办法:在对象边缘、半透明区域和窄缝空白处逐像素录制按下点与命中判定结果,比对是否与预期分支一致;触屏设备额外测试指尖遮挡下的实际命中位置与视觉命中区域的偏差。

延伸

  • 同组C1.09.2 相交判定与完全包含判定给出不同结果 · C1.09.3 框选与画布平移共用空白区时需要模式或修饰键
  • 相邻C1.05 光标热点与命中判定 · C1.08 拖放
  • 站内检索marquee selection · hit testing · gesture ambiguity

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/C1.09.1