Published on

交互体验进化:原生级的拖拽、菜单与对话框系统

Authors

交互体验进化:原生级的拖拽、菜单与对话框系统

在奠定了VS Code风格的界面框架后,接下来的挑战是如何填充细节,让用户的每一次点击和拖拽都感到自然流畅。在0.7.1到0.7.4版本中,我们专注于交互体验(Interaction Polish)

1. 所见即所得的拖拽体验

在之前的版本中,添加模块可能需要点击按钮,然后模块出现在画布中心。这不够直观。

我们实现了原生拖拽支持。现在,你可以直接从侧边栏的模块浏览器中,按住一个振荡器模块,将其"拖"进画布。

技术细节: 我们利用了HTML5 Drag and Drop API与ReactFlow的坐标系统相结合。

  1. onDragStart: 携带模块类型数据。
  2. onDrop: 计算鼠标在画布上的投影坐标(project({ x: clientX, y: clientY })),确保模块准确落在鼠标松开的位置。

这种"物理感"的交互极大地提升了创作时的沉浸感。

2. 完整的桌面级菜单系统

虽然Web应用通常依赖按钮,但对于像SynthesizerFlow这样复杂的创造力工具,顶部的**标准菜单栏(File, Edit, View, Help)**是必不可少的。

我们基于Radix UI构建了一套完全可访问的菜单系统:

  • File: 项目的新建、打开、保存、导出。
  • Edit: 撤销、重做、全选、删除。
  • View: 缩放控制、布局重置。

为了适应移动端,我们还实现了一个智能的自适应机制:在窄屏幕上,原本平铺的菜单项会自动收折进一个"汉堡菜单"中,保证了功能在任何设备上的可用性。

3. 对话框与无障碍性

我们统一了全站的弹窗体验,引入了标准化的Dialog组件系统。无论是"设置"面板还是"关于"页面,都遵循一致的视觉规范和交互逻辑。

重要的是,基于Radix UI的底层保证了完善的键盘导航支持。用户可以使用TabEsc等快捷键无障碍地在对话框中从容操作。

4. 音频能力的增强:立体声与虚拟键盘

在交互优化的同时,我们没有忘记音频核心的提升:

  • 立体声扬声器:Speaker模块现在支持双声道输入,并新增了**Pan(声像)**控制旋钮,让用户可以创造更宽广的声场。
  • 虚拟键盘:为了方便没有MIDI键盘的用户,我们在界面底部集成了一个屏幕虚拟键盘。它不仅支持鼠标点击,更支持电脑键盘映射(A-K键位),让你随时随地都能演奏。

结语

细节决定成败。通过这些交互层面的打磨,SynthesizerFlow不再只是一个冷冰冰的代码项目,而开始变得顺手、贴心,真正成为以后用户愿意花时间沉浸其中的创作空间。