Skip to content

第 20 章 · 调参数的手感

背景:变换面板滑块松开鼠标才更新,手感割裂

过程:滑块拖动时实时刷新模型姿态

相关代码:[model-detail.ts](file:///C:/Users/zhujieling11/frontend/src/menus/model-detail.ts)


你用过 Photoshop 的滑条吗?

拖动亮度滑条,图片实时变亮变暗。 拖动对比度滑条,对比实时变高变低。 你一边拖,一边看效果。拖到合适的位置,松手。

如果是这样呢——你拖动滑条,图片没变化。你松开鼠标,图片"啪"的一下变了。 不对,再拖一次。还是没变,松开才变。 再试一次。 再试一次。

烦不烦?


两步操作的麻烦

"现在的变换面板就是这样,"外交官说,"位置、旋转、缩放的滑条——拖的时候模型不动,松手才动。"

"为什么?"AI 同行者问。

"因为用的是 change 事件,"外交官翻开 model-detail.ts,"input 元素的 change 事件,只有在值确定的时候才触发——也就是松开鼠标、或者按回车的时候。拖动的时候不触发。"

"那为什么不用 input 事件?"

"问得好,"外交官说,"input 事件在值变化的时候就触发——拖动的时候每动一像素就触发一次。这样就能实时更新了。"

"那为什么之前用 change?"

"可能是习惯,可能是担心性能,"外交官耸耸肩,"很多人觉得'实时更新会不会卡'。但你想——更新一个模型的位置,就是改一下 position 属性,几微秒的事。有什么好卡的?"

"确实……"

"所以我们把 change 改成 input,"外交官说,"就改一个事件名。然后模型就跟着滑条动了。"


手感是什么

"不就是实时更新吗,值得写一章?"AI 有点疑惑。

"值得,"外交官严肃地说,"因为这涉及到一个很重要的东西——手感。"

"手感?"

"手感,"外交官重复,"你用软件的时候,有没有过一种感觉——这个软件'顺手'或者'不顺手'?说不上为什么,但就是觉得好用或者不好用。"

"好像有过……"

"那就是手感,"外交官说,"手感不是一个具体的功能,是很多小细节的总和。滑条是不是实时的、按钮是不是点下去就有反馈、窗口拖动跟不跟手、滚动平不流畅——这些加起来,就是手感。"

"那实时滑条有什么不一样?"

"我给你讲个道理,"外交官坐直了身子,"人调节一个参数的时候,大脑的工作模式是这样的:

拖一下 → 看效果 → 判断多了还是少了 → 再拖一下 → 再看效果 → ...

如果是实时的,这个循环是连续的——你一边拖,一边看,大脑一边判断,手一边微调。整个过程是流畅的,是'感觉'的。

如果是松开才生效,这个循环就断了——

拖一下 → 松手 → 看效果 → 不对 → 再拖 → 松手 → 再看 → ...

每一次都要'松手→看→再拖',多了两个步骤。而且你在拖的时候,不知道当前位置是什么效果,只能猜。"

"就像……闭着眼睛调收音机?"

"就是闭着眼睛调收音机,"外交官拍了下桌子,"你拧旋钮的时候听不到声音,松手才响。你得拧一下、听一下、再拧一下。烦都烦死了。"


性能的担忧

"但是……万一真的卡呢?"AI 问,"比如有十几个模型,拖动位置滑条,所有模型一起动——会不会掉帧?"

"不会,"外交官摇头,"更新模型的 position 就是改三个浮点数。巴比伦每帧都要更新几百个 mesh 的位置,多这几个不算什么。"

"那什么时候会有性能问题?"

"如果滑条控制的是一个很重的操作——比如重新加载模型、重新计算布料、重新生成纹理——那实时更新就不合适了。这时候应该用 change,松手再生效。"

"怎么判断重不重?"

"简单,"外交官说,"你自己拖一下试试。卡不卡,一测就知道。不卡就实时,卡就不实时。不要想当然地觉得'可能会卡'就不做。"

"先测再决定。"

"先测再决定,"外交官点头,"性能优化最怕的就是'我觉得会慢'。很多时候你觉得慢的东西,实际快得很。你觉得快的东西,实际可能是瓶颈。"


input vs change 的选择

"那是不是所有滑条都该用 input 事件?"AI 问。

"不一定,"外交官想了想,"分情况。"

他列了个表:

操作类型推荐事件原因
位置/旋转/缩放input轻量操作,实时更新体验好
颜色/透明度input轻量操作,视觉反馈直观
滑条微调(精确值)input + 数值输入框实时看效果,精确值手动输
模型重建/重加载change操作重,实时会卡顿
文件路径/文本输入changeblur输入过程中值不稳定,等输完再处理
开关/复选框change只有两种状态,没有中间过程

"核心原则就是——操作轻、反馈重要,就实时。操作重、过程不重要,就等确定了再触发。"

"那我们这个变换面板属于哪一类?"

"轻量操作、反馈重要,"外交官毫不犹豫,"位置旋转缩放——用户拖的时候最想看到实时效果。不然怎么知道调到什么位置合适?"


第十一颗石子

第十一颗黄石子落进"已处理"的堆里。

这一颗最小——就是把 change 改成了 input。 一个单词的改动。 但它改变了用户调节参数的手感

"手感这种东西,"外交官看着那颗石子说,"说起来虚,但用户是能感觉到的。你用一个软件,觉得'顺手',就是这些无数个小细节在起作用。你说不上哪里好,但就是觉得舒服。"

"反之呢?"

"反之就是——你说不上哪里不好,但就是觉得'这个软件有点难用',"外交官笑了笑,"难用,往往不是因为缺功能,是因为每一个小细节都差那么一点。加起来,就难用了。"

他把那颗石子放好,位置刚好和其他的对齐。

差一点,和刚好,差很多。


附录:UI 交互手感检查清单

检查项说明
滑条实时反馈拖动时实时更新效果,不要等松开鼠标
按钮即时反馈点击瞬间有视觉反馈(按下态、颜色变深、缩放)
输入框即时校验输入时就提示对错,不要等提交才说格式不对
拖动手感拖动时跟手,不要有延迟或跳动
滚动流畅60fps,不要掉帧
动画自然过渡动画要顺,不要太突然也不要太慢
键盘操作所有功能都能用键盘完成,不要只能用鼠标

教训:用户对软件的评价,往往不是来自大功能,而是来自小细节。滑条是不是实时的、按钮有没有反馈、动画够不够流畅——这些加起来,就是"手感"。手感好的软件,用户说不出哪里好,但就是喜欢用。手感差的软件,功能再多,用户也觉得难用。