「阅读」Web界面设计

这几天在整理作品集,发现之前随手写的表单实践一文巨烂无比,所以决定回炉重搞。不过那篇文章里提到的《Web 界面设计》 一书,倒是本很不错的书。

此篇文章,我主要想跟大家分享下,我在设计 Web 端的自定义表单需求的时候,从此书学到的知识。(不知道现在还有多少人做过类似「自定义表单」这类的需求... 其实整个交互很简单,就是用户从左方拖拽控件到屏幕中央的手机内,然后在右方设置控件属性)

PS:发现这本书真的非常幸运。在设计此需求的时候,想找一些关于 Web 端设计的书籍来看(因为读书的时候,做的都是移动端的设计,知识相对薄弱)。然后我随手在豆瓣搜索「Web」 ,以为没多大希望... 谁知道一搜就搜到了好书...


在设计 Web 端的自定义表单的时候,我发现拖放看似很简单。但事实上,拖放过程涉及了大量细节。比如:

  • 用户怎么知道可以拖动?
  • 拖放对象的目的是什么?
  • 在哪里可以或不可以放置拖动的对象?
  • 通过什么视觉元素来表示拖动能力?
  • 拖动期间,怎样表示有效和无效的放置目标?
  • 是否允许用户拖动实际的对象?
  • 还是只允许用户拖动实际对象的幻影?
  • 整个拖动与放置期间,要对用户给出哪些视觉反馈?

幸运的是,我在《Web 界面设计》一书的第二章中得到了答案。此书将用户拖放操作的特殊状态称为趣味瞬间(Interesting Moment)。

书中提到,趣味瞬间是由15个事件与6个相关元素组合而成。这15个事件分别是:

  1. 页面加载:在所有操作发生之前,可以预告拖放功能。例如,可以在页面上显示一条提示信息,告诉用户可以拖放某些元素。
  2. 鼠标悬停:鼠标指针悬停在可拖动的对象上方。
  3. 鼠标按下:在可拖动对象上按下鼠标键。
  4. 拖动启动:鼠标开始移动。(在对象被拖动3像素或鼠标按下超过0.5秒时启动拖动。)
  5. 拖动离开原始位置:可拖动对象离开了原来的位置或包含它的容器。
  6. 拖动重新进入原始位置:可拖动对象又进入了原来的位置。
  7. 拖动进入有效目标:可拖动对象位于有效的放置目标上方。
  8. 拖动退出有效目标:可拖动对象离开有效的放置目标。
  9. 拖动进入无效目标:可拖动对象位于无效的放置目标上方。
  10. 拖动进入非特定目标:可拖动对象位于放置目标和非放置目标之外的区域。取决于是否将有效目标之外的区域全都看成无效目标。
  11. 拖动悬停于有效目标:可拖动对象暂时停驻于有效目标之上,但用户没有释放鼠标。此时,有效的放置目标通常会突然打开。例如,拖动并在一个文件夹上方暂停,文件夹会打开以示可以接受上方对象。
  12. 拖动悬停于无效目标:可拖动对象暂时停驻于无效目标之上,但用户没有释放鼠标。这个事件有用吗?也许可以在此时对用户给出反馈,说明为什么下面不是一个有效目标。
  13. 放置被接受:可拖动对象位于有效目标之上,而且放置已经被接受。
  14. 放置被拒绝:可拖动对象位于无效目标之上,而且放置已经被拒绝。此时用不用把被拖动对象移回原处?
  15. 放置在父容器上:拖动对象时的位置一般来说不会有什么特殊之处,不过在个别情况下,不同位置会有不同的含义。

在上述的每个事件发生时,都可以在视觉上操作一些相关元素,这些元素包括:

  1. 页面(例如,在页面上显示静态消息)
  2. 光标
  3. 工具提示条
  4. 拖动对象(或拖动对象的某个部分,例如模块的标题区)
  5. 拖动对象的父容器
  6. 放置目标

最后,将这些事件与元素放进一个表格中,就会得到:

每一个事件与元素的交叉点,都是可实现的行为。而上表就像一个备忘录,可以确保不遗漏交互期间需要处理的任何情况。但是,考虑到简洁的需求,我们不一定需要为每一个交叉点都设计一个行为。同时,在设计行为的时候,我们还需要考虑该行为是否适合拖放。

《Web界面设计》中也提到,适合拖放的情况有以下五种:

  1. 拖放模块(重新排列页面上的模块)
  2. 拖放列表(重新排列列表项的顺序)
  3. 拖放对象(改变对象间的从属关系)
  4. 拖放操作(在被放置对象上执行操作,比如:拖动上传功能)
  5. 拖放集合(通过拖放操作集合,比如:购物车功能)

如果你设计的界面是属于以上几种,那么拖放操作会是很好的选择。

Comments
Write a Comment