拖放的三阶段:拾起、移动、放下
别名: 拖放 · drag and drop · pickup transport drop
概念解释
拖放(drag and drop)可以拆成拾起(pickup)、移动(transport)、放下(drop)三个阶段:用户先指明要移动的对象并让它进入被拖动的状态,再在保持控制的同时把它带向某个目的地,最后在一个可接受的位置释放来提交这次操作。这三个阶段各自有独立的失败方式,把拖放当成"一次比较长的点击"去设计和测试,会漏掉真正出问题的环节。
机制
拖放是直接操纵(direct manipulation)交互范式的一个典型实现:拾起阶段在对象和指针之间建立一个临时绑定,让对象的视觉表现跟随指针移动,制造出"东西被抓在手里"的错觉;移动阶段持续更新对象的位置,并根据当前所在处实时给出能不能放置的反馈;放下阶段依据释放瞬间的位置做命中判定,真正改变底层数据状态。这个过程要求用户同时维持三件事:按压不能松开、轨迹要控制得足够准(尤其是精细目标或狭窄容器)、视觉注意力还要不断在移动中的对象和目的地之间切换搜索。移动距离越长、目标越小、途中出现滚动或遮挡,这三重负担会互相放大而不是简单叠加,因为控制轨迹和寻找目的地这两件事本来就在争夺同一份注意力资源。
怎么研究
分别记录拾起阶段的失败(该选中的没选中、选中了不该动的)、移动阶段的路径偏差和意外中断(比如中途因为遮挡或滚动而松手)、放下阶段的无效释放,以及整体的完成时间和主动取消次数——这四类数据要分开统计而不是合并成一个成功率。操控对象大小、起点到终点的距离、目标区域大小、是否需要滚动,以及输入设备(鼠标、触控笔、手指),因为只看总体成功率没办法判断问题到底出在选中、运输还是提交这三步里的哪一步:同样是六成的成功率,可能是拾起阶段大量误选,也可能是精细放置时反复偏移,两者需要完全不同的修复方案。
边界
触屏、鼠标、笔和键盘启动、维持、释放一次拖动的方式各不相同——触屏依赖起始阈值和持续接触,鼠标依赖按键状态,键盘通常要靠专门设计的替代交互而非真正的连续拖动。列表重排、文件在文件夹间移动、画布上的图形变换,这几类操作外观上都可能表现为"拖着一个东西走",但提交后的后果完全不同(前者只改变顺序,后者改变归属,第三者改变几何属性),不能共用同一套反馈或验证标准。桌面鼠标环境下得出的拖放可用性结论,不能直接搬到小屏幕或依赖辅助输入设备的场景——小屏幕上手指本身会遮挡目的地,可用的移动空间也被压缩得多。
怎么落地
- 为三个阶段分别给出清晰、可辨识的反馈:哪个对象被拾起了、当前处于正在拖动的状态、以及此刻悬停位置是否是有效目的地。
- 在测试和实际打点里为三个阶段分别记录事件,用来定位失败具体发生在哪一步,而不是只看"最终这个对象有没有移动到该去的地方"这一个终点指标。
- 为长距离拖动、途中会被遮挡、或目的地是精细小目标的场景,额外提供一条不依赖持续拖动的完成路径。