必须提供非拖拽的替代方式
别名: 上移下移 · 输入位置排序 · keyboard reorder
概念解释
拖拽排序把「改顺序」绑在一条连续的指向路径上。指针精度不足、不能持续按住、只用键盘、或开关扫描的人走不通这条路径。非拖拽替代指:用上移 / 下移、选位置、输入序号等离散动作,达到与拖拽相同的最终顺序,而且不必先会拖。无障碍侧已经说明替代路径要能力等价;这里落到内容列表上——排序作为内容操作,不能只存在于拖拽这一种实现里。拾起反馈和边缘滚动再完善,也替代不了这条路径。
机制
拖拽要求同时满足:看见目标槽、持续按住、沿路径移动、在正确位置松开。任一环断开,整项操作失败。离散替代把同一目标拆成「选中这项」和「把它放到某索引」,每一步都可以单独重试,也不依赖路径上的瞬时反馈。若替代藏在拖拽学会之后才出现的菜单里,发现成本等于没有。若替代只能一次移一格,八十条的列表会把替代变成惩罚,人会放弃排序而不是改用按钮。等价意味着最终顺序集合相同,不意味着每一步耗时相同;但耗时差距大到任务做不完,等价就只写在说明里。
怎么研究
同一排序任务,比较仅拖拽、拖拽加一次移一格、拖拽加「移到位置 / 移到顶部」。参与者包含键盘-only 和触屏。
自变量:替代是否可发现、一步能跳多远、完成后顺序是否与拖拽可达集合相同。 因变量:键盘-only 能否完成、完成步数、是否放弃排序、误把项移出合法范围的次数。
不要只找会用鼠标的人来「也试一下键盘」——那测到的是迁移,不是替代是否自足。开关扫描用户的路径长度(要扫过多少控件才移一格)是独立指标。实验室若把替代按钮画得和测试说明里一样显眼,会高估真实发现率。
边界
用户自己排列的播放列表、看板列、导航自定义,替代是必需的。算法排序(按日期、按名称)本身就不是拖拽任务,不必为自动排序再做上移下移。权限只读时两种路径都不应出现。极短列表上,一次移一格已经等价且可发现,不必再做「跳到第 n 位」。跨设备同步的顺序若以服务器权威为准,本地替代移完必须能保存,否则键盘用户改了却留不下。
怎么落地
- 在每条可排序项旁提供上移、下移;在项菜单提供「移到顶部 / 底部 / 指定位置」。
- 这些控件在未开始拖拽时就可见或可被键盘聚焦,不要作为拖拽成功后的奖励。
- 指定位置用该项在列表中的序号,移动后把焦点留在该项上,方便连续调整。
- 验证:断开指针,只用键盘把第三条移到第一;再用「移到指定位置」把一项放到第 10。顺序与拖拽可达结果相同,且中途焦点不丢,替代才算成立。