站在用户角度想交互
问题
AI 写交互时,常常是按照实现的顺序而不是用户的顺序来组织界面:先有数据结构,就摆什么控件;代码里哪个函数先写好,按钮就放在哪里。结果:
- 长表单的"保存"按钮在页面顶部,用户填到底部还得滚回去找
- "删除"紧挨着"保存",同样的颜色、同样的大小
- 最常用的功能藏在"更多 ⋯"菜单的第二层,不常用的设置却占着工具栏最显眼的位置
- 只有一个选项也要先选中它,才能点"下一步"
- 改个名字要:点"编辑模式" → 改 → 点"应用" → 点"保存" → 确认弹窗"确定要保存吗?"
- 新建一个东西走了三步向导,其实只需要填一个名字
- 按钮写着"提交"、"执行"、"确定",用户不知道点了会发生什么
- 出错时弹一句"操作失败",输入的内容全清空了
每一条单看都不致命,加起来就是"这东西怎么这么别扭"。
第一步:先说清楚用户来干什么
动手前写下来(哪怕只在心里):
- 谁在用:第一次用的新人,还是每天用的老手?
- 最常做的 1~3 件事是什么:这几件事必须最快、最显眼。
- 每件事的理想路径:从打开程序到完成,最少需要几步?
界面的布局按这个排序,而不是按功能列表、数据库字段或代码模块排序。
第二步:按钮和入口放哪
| 原则 | 做法 | 反例 |
|---|---|---|
| 操作靠近它作用的对象 | 行内的编辑/删除放在那一行;卡片的操作在卡片上 | 先勾选一行,再去页面顶部找"编辑" |
| 按完成流程的位置放 | 表单的提交按钮在表单末尾;对话框的按钮在底部 | 长表单的保存在最顶部 |
| 频率决定显眼程度 | 最常用的直接露出;偶尔用的放菜单;极少用的放设置 | 常用功能藏在二级菜单 |
| 一个界面一个主操作 | 主操作用强调样式,其他用次级样式 | 五个同样醒目的蓝色按钮 |
| 危险操作隔开 | 删除用不同颜色、放在远一点的位置,或放进菜单 | 删除和保存并排、长得一样 |
| 遵循平台惯例 | Windows 对话框按钮右下角,"确定"在"取消"左边;macOS"取消"在左、主按钮在最右;网页弹窗右上角有关闭 | 自创一套顺序 |
| 同一种操作,位置始终一致 | 每个页面的"新建"都在同一个地方 | 每页位置不一样 |
| 入口在用户会找的地方 | 用户会想"我要导出"时看的地方(工具栏、文件菜单、列表上方) | 导出藏在设置页里 |
第三步:砍掉多余的步骤
把主要任务的每一步列出来,逐步问:
- 能不能删掉? 这一步用户必须做决定吗?没有就删。
- 能不能给默认值? 90% 的人会选同一个,就默认选中它。记住用户上次的选择。
- 能不能合并? "编辑 → 应用 → 保存"能不能变成直接编辑、自动保存或一个保存?
- 能不能推迟? 注册、详细设置、可选字段,能不能等用户真正需要时再问?
- 能不能自动推断? 能从文件名、上下文、已有数据推断出来的,就不要让用户填。
常见的多余步骤:
| 多余的 | 改成 |
|---|---|
| 可撤销的操作还弹"确定吗?" | 直接执行,给"撤销"(Gmail 式的 toast);只有不可逆、影响大的操作才确认 |
| 确认弹窗写"确定吗?[确定][取消]" | 写清后果和对象:"删除 3 个文件?此操作无法撤销。[删除][取消]" |
| 只有一个选项也要选 | 自动选中,或直接跳过这一步 |
| 单独的"编辑模式"开关 | 直接可编辑 |
| 一个字段的事走多步向导 | 一个输入框 + 一个按钮,或者行内创建 |
| 改完设置还要点"应用"再点"保存" | 一个动作,或即时生效 |
| 操作完跳到别的页面,用户还得导航回来 | 留在原处,就地更新 |
| 每次都要重新填同样的信息 | 记住,或预填 |
第四步:不要加用户没要的东西
AI 很容易"顺手"多做:用户要一个导出按钮,结果多了导出格式下拉框、导出历史、导出设置页;用户要一个小工具,结果多了侧边栏、设置菜单、主题切换、关于页、帮助中心、"即将推出"的占位入口。
每多一个功能、菜单、入口,用户就多一样要看懂、要跳过的东西,主要任务的入口就更难找。界面上的每一样东西都在争夺用户的注意力。
加东西之前问:
- 用户要了吗? 没要、也不是完成主要任务所必需的,就不加。
- 没有它,用户会卡住吗? 不会,就不加。
- 它只有一个选项、或者几乎没人会改吗? 那就不需要设置项、不需要下拉框,直接用合理的默认值。
- 它是空的、没实现的、"以后可能用到"的吗? 不要放占位入口、灰掉的"敬请期待"、点了没反应的菜单。
常见的多余:
| 多余的 | 改成 |
|---|---|
| 只有一两个功能的工具,却有侧边栏 + 顶部导航 + 设置菜单 | 一个界面直接把功能摆出来 |
| 没人要求的主题切换、语言切换、个性化设置 | 不做;需要时再加 |
| 一个页面就够的,拆成"首页 / 仪表盘 / 关于 / 帮助" | 一个页面 |
| 同一个功能有三个入口(工具栏、右键菜单、设置页) | 一个用户最会去找的入口;快捷键可以另加 |
| 占位的"即将推出"、"高级功能"、空的统计卡片 | 删掉 |
| 每个值都做成可配置项 | 给好默认值,只暴露用户真正会改的 |
觉得某个附加功能确实有用时,做完主要需求后提一句建议,让用户决定要不要,而不是直接做进去。
第五步:让用户随时知道发生了什么
- 按钮文案 = 动词 + 对象:"导出 CSV"、"删除项目"、"发送邀请",而不是"提交"、"执行"、"确定"。用用户的词,不用实现的词(不写"同步 payload"、"触发 job")。
- 点了要有反应:100ms 内要有视觉反馈;超过 1 秒显示进度或加载状态,并禁用按钮防止重复提交。
- 完成了要告诉用户:轻量的成功提示,或者界面直接显示结果。
- 出错要说怎么办:说清哪里错了、怎么改;错误显示在出错的字段旁边;保留用户已经输入的内容。
- 空状态要引导下一步:列表为空时,告诉用户这里会出现什么,并直接给出"新建第一个"的按钮。
- 键盘:打开对话框时焦点在第一个输入框;Enter 提交、Esc 关闭;Tab 顺序和视觉顺序一致。
- 不要突然变:不要在用户操作时移动按钮位置、弹出东西挡住正在点的地方。
CLI 也一样:常用参数有短选项和合理默认值;危险操作要确认但提供 --yes;出错信息说明怎么修;长任务显示进度。
第六步:实际走一遍
写完不等于好用。交付前必须真的以用户身份走一遍主要任务(截图方式见 background-friendly):
- 假装第一次打开:不看代码,只看界面,能不能在 5 秒内找到要做的事的入口?
- 数步数:完成主要任务需要几次点击/输入?和第一步写下的理想路径比,多出来的每一步都要有理由。
- 只用键盘走一遍。
- 故意做错一次:输入错误、中途取消、网络断开,看会发生什么,输入会不会丢。
- 窗口缩小、内容很多或为空时,按钮还在合理的位置吗?
走不了(没有运行环境)时,明确告诉用户"交互流程未实际验证",并把你设计的步骤列出来让用户检查。
边界
- 用户指定了布局或流程时按用户的来;你觉得有问题,说出来,让用户决定。
- 专业工具的老手用户可能更看重效率而不是易学:快捷键、批量操作、高密度比新手引导更重要。先判断用户是谁。
- 不可逆、高风险的操作(付款、删除生产数据、群发消息),多一步确认是对的,不要为了"少步骤"把它删掉。
- 改现有程序时,不要为了"更合理"大改用户已经习惯的位置;确实要改就说明原因。
检查清单
- 最常做的 1~3 件事是什么?它们是不是最快、最显眼的?
- 每个按钮都在它作用的对象旁边、在用户完成流程的位置吗?
- 每个界面只有一个主操作?危险操作和主操作隔开了吗?
- 符合平台惯例(按钮顺序、位置、快捷键)吗?
- 主要任务的每一步都问过"能不能删、能不能默认、能不能合并"吗?
- 每个功能、菜单、入口都是用户要的或必需的?没有占位入口、没人要的设置项?
- 确认弹窗只用在不可逆操作上?可撤销的操作给了撤销?
- 按钮文案是"动词 + 对象"?用的是用户的词?
- 加载、成功、出错、空状态都处理了?出错时输入保留了吗?
- 真的以新用户身份走过一遍、数过步数了吗?没走就说"未验证"