迷于设计,沉于动效。由于笔者对动效交互很感兴趣,遂著此文。希望能对大家有一点帮助。动图较多,建议 Wifi 下浏览。
内容简介:动效如今被广泛的使用在界面设计中。但如何合理使用实效,而不是让动效干扰用户,却少有总结的经验。因此本文旨在结合现有的动效资源和案例,总结一下动效的使用目的,使用场景以及实现技术。
文章结构:
- 现状介绍
- 动效使用历史
- 动效的使用目的
- 动效使用场景
- 使用动效的注意事项
- 如何制作流畅的动效
- 思考和展望
- 参考文献
现状##
动画作为一种娱乐方式,被好莱坞的大神们已经运用到了出神入化的地步。作为一个设计新人,我主要关注如何运用动效在 UI 设计上,希望它也能够给界面提升一些趣味性。
如今你可以在各种网站和 APP 上看到动效的身影。设计师想通过运动的物体来吸引用户的注意力,从而实现其目的。然而,有些动效仅仅是为了好看而做,并没有和界面的实际功能联系起来,因此造成用户的认知障碍。如何将动效运用在合适的场景,以及如何制作流畅的动效成为了很多设计师思考的问题。
动效使用历史##
Haziwani 和 Berrand(2016) 总结到,在1970年左右,用户界面还只是一系列头尾相连的 PDF,没有任何的动效。直到乔帮主发布了发布了 Macintash(1984),情况得到了一些改善。但是由于电脑画面处理能力的限制,动效使用的十分有限。随着电脑性能的提升,越来越多的动效被使用到电脑和手机当中。
到了2007年,改变人类的产品 IPhone 问世了。它极大了颠覆了人们对电子设备体验的感受。动效真正开始进入了每个人的日常生活。为什么大家都爱使用动效呢?Cooper(2014) 解释到,动效是一种强大的机制,可以解释和说明物体间的关系。这个机制在手持设备上尤其有用,因为手持设备的屏幕大小有限,人们可以利用动效充分使用隐藏内容的功效。转场动效帮助用户构建了清晰的思维模式—新的内容从哪来,新内容和旧内容之间的关系是什么。动效在网站上的效果也非常好,它可以有效的引导用户浏览界面。
动效的使用目的##
因为动效存在负面作用,合理的使用它变尤为重要。Cooper (2014) 提出动效需要谨慎的使用。过度的使用动效不仅让人困惑和反感,而且让人生理上不舒服。比如苹果的 IOS7,它过分强烈的视差效果让很多用户感到不舒服。
交互动效的首要目标应是支持和增强用户在状态间的转化。Saffer(2013) 提出使用动效存在下列目的:
- 吸引用户注意力在指定区域
- 表现对象和用户操作间的关系
- 维持多窗口或多状态的上下文关系
- 提供持续性事件的认知感
- 创造虚拟空间引导用户在状态和功能间转化
- 创造沉浸感和趣味性 (每一个举一个动图例子)
Yalanska(2016) 也定义了 UI 动效的四项作用:
- 支持微交互
- 显示运动过程
- 解释
- 装饰
Google 的 Material Design(2017), 提出在 MD 中,动效用来描述空间关系,功能,富有美感和流动性的目标。 动效显示 APP 是如何组织的以及它能够做什么,具体如下:
- 引导窗口切换
- 提示用户接下来发生的事
- 对象间的层级感和空间感
- 减缓用户对等待事件的认知
- 美感和个性化
综上,笔者总结了交互动效的使用目的, SAFRI,游猎法则(少了第二个A,原词 SAFARI)
1.State, 告诉用户对象和窗口的状态是如何变化的
当界面中对象状态需要发生变化时,可以用动效展示变化的过程,让用户更清楚的感知到该变化。相应的,当窗口发生变化时,可以用动效更清楚展示窗口是如何从一个状态转变到另一个状态的。
2.Attention,吸引用户注意力,告诉用户做什么
当你想让用户关注某一个区域,或执行某一个操作时,可以通过动效吸引他们的注意力。当用户需要执行操作时,注意 UI 和动效的结合要能告知用户需要进行的操作。
3.Feedback, 告诉用户操作和对象间的关系
当用户执行了某一操作后,动效是一个非常好用的反馈机制。通过动效的适当运用,用户可以清晰感知到自己操作的反馈,让用户知道自己做了什么。
4.Relief, 缓解用户对应用处理速度的感知
当应用执行一个长时间操作时,可以用动效缓解用户对时间的感知,甚至创建一个假的动效效果(其实应用并不用处理这么长时间)。当下许多 APP 下拉时的加载动效运用的便是该原理。对于用户,他们关注的是感受到的速度,而不是应用实际消耗的速度。
5.Individuation, 让产品更有趣和个性
为了让产品更有趣味性,可以在某些场合适当运用动效创造一些让人愉悦的动画效果。两点是笔者觉得需要注意的,一是动效时间要足够短,二是动效要足够流畅。
需要说明的是,这些目的不是独立存在的。设计师可以运用其中任意几条去设计一个动效。比如,两个窗口间的切换动效不仅吸引了用户的注意力,告诉用户面板在切换了。而且还告诉用户两个面板的位置和空间关系,上下,左右还是前后。
乔帮主说过:“设计并不仅仅是它看到或感受到的样子。设计应该表现它怎么工作的。“笔者认为动效也是一样的道理,动效应该它怎么工作的。设计动效时问自己1个问题,这个动效的目的是什么?
动效使用场景##
如果我们拆分动效到具体的使用场景,Cao(2015) 帮我们罗列了当今网页设计中的10大使用场景,大部分场景也适用于手机应用中:
1.滚动 Banner
2.表单
3.视觉中心
4.导航栏和菜单
5.转场动效
6.背景动效
7.加载动效
8.滚动事件触发的动效
9.鼠标 Hover 动效
10.图片动效
使用动效的注意事项##
当我们制作交互动效的时候,有哪些事情是我们可以提前注意,或者有哪些标准可以用来评判是不是一个好动效。Saffer(2013) 说到如果你做一件事可以不用动效,那尽量避免。从微信和 Facebook 这种全民 APP 在动效使用上自制不难看出。
其次,动效本身需要符合其传达的意义。比如用户上下滑动屏幕,窗口内容就该上下变换,而不是左右变换。仅仅为了动效而作动效是不可取的,交互动效需要尽可能解释其本身含义。
2016年,Hazwani 和 Bernard(2016) 列出了4个让动效具有意思的注意事项:
- 概念转换:不要独立的设计界面布局和动效。设计它们的时候思考它们之间的联系,如何它们之间转化更自然,符合内容的语义。
- 解释关系:每个元素都有其意义,状态,位置等属性。尝试用动效反应这些属性间的关系。比如点击一个按钮,如果会触发一个面板。更好的效果是让面板从按钮处出现且渐入,而不是让面板直接渐入。
- 唯一性:不要让一个相同概念的元素在画面中同时出现在2个地方。这会让用户对理解该元素的意义产生困惑。比如点击小图显示大图,小图在大图显示的过程中依然出现在用户视野内。
- 空间一致性:动效在空间上需要符合实际性。当一个元素从左侧离开视线后,潜意识里你会预判它回来的方向也是从左侧。
在 2015 澳大利亚的 CSS 峰会上, Cock(2015) 谈到需要在实际开发中注意的四个基本 UI 动效原则:
Web 开发时多使用 opacity 和 transform properties 的组合,其他的属性变化会导致 WEB 渲染变慢,影响体验。笔者查阅了一下,更准确的是说,多使用 CSS3 中的 transfrom-3D 属性,因为这些属性会通过 GPU 硬件来处理,而不是通常处理网站的 CPU
让动效足够快 (300ms 左右),提供给用户视觉上的愉悦,而不是带来延迟的观感
独立的运动物体各个部分,这样使整体动画更丰富,不呆板
使用自定义的动效函数,让你的动效与众不同
Material Design(2017) 也提出了4点原则:
- 响应:动效要快速响应用户的操作,移动设备上,长动画大约在 300-400ms 之间,短动画大约在 150-200ms 之间。
- 自然:对于动效的运动状态,要符合真实世界,因此要根据实际情况运用合适的 natural easing curves
- 感知:运动的物体对周围的物体会产生影响,因此要考虑其周围的环境
- 目的:动效要具有目的性,传达给用户特性的信息
综上,笔者总结了简短的3个原则:
- 逻辑:动效是否符合客观逻辑【响应时间,方向,一致性,目的】
- 时间:动效的时长是否合适 【视觉上感受良好】
- 真实:动效是否反映了真实世界的运动规律 【惯性,缓入缓出】
如何制作流畅的动效##
笔者明白“纸上得来终觉浅,觉知此事要躬行”的意义。于是收集完理论后,笔者便开始了对动效制作的探索。首先学习了迪士尼动画师 Johnson 和 Thomas 的动画圣经—《The Illusion of Life: Disney Animation》其中的12条动画设计原则:
- 压缩和拉伸(Squash & Stretch)
- 预期感 (Anticipation)
- 视觉中心 (Staging)
- 一气呵成和分批设计 (Straight ahead & Pose to pose)
- 跟随和重叠动作 (Follow through & Overlapping)
- 缓入和缓出 (Slow in & Slow out)
- 弧(Arc)
- 第二动作 (Second Animation)
- 时间 (Timing)
- 夸张 (Exaggeration)
- 立体感 (Solid drawing)
- 有趣 (Appeal)
这些原则虽然是针对动画片的,但是笔者在研究了它们后,按照自己的理解,选出了可以运用到交互动画制作的 9 条原则:
- 时间和节奏:动画的总时长和每帧动画间的距离(先快后慢,或先慢后快)
- 缓入和缓出:符合现实世界规律,物体不能凭空运动和停止,有加速和减速过程
- 预期感:给动画添加一个反向动画,让动画更突出,更好的帮助用户理解动画
- 压缩和拉伸:制造视觉上的假想,突出效果
- 弧:符合现实世界规律,少有纯直线运动
- 跟随和重叠动作:辅物体会追随主物体运动,且由于惯性,会有时间延迟
- 第二动作:添加第二动作用于丰富第一动作
- 夸张:让动画更具个性
- 有趣:结合以上8点,传递给用户一个有趣的印象
设计师可以灵活选择其中的几个原则进行自己的动效设计。笔者接下来使用 FramerJS 对 Cao 总结的 10 个 Web 场景针对手机制作动效,按照场景,目的,制作,评估的四步骤,具体解释如何综合运用以上理论。
1
场景:Banner
目的:State, Attention, Individualization, Relief
制作:
笔者做的旋转 Banner, 主要用到了 Framer 的 PageComponent. 用定时器控制 Page 的切换,和底部导航圆点样式的切换。需要掌握了简单 coffeeScript 的语法即可。
细节优化:
- 添加一个加载按钮的效果,让用户感受到还有多久切换到下一个 Banner。技术上使用的是 CSS 的 background-image: linear-gradient 属性。通过控制其投射角度,动态变化大小。
- 时间上,24 frames/s 是一个适中的节奏。所以假定 2s 走完 360 度,则每 0.0417s 走完 7.5 度。实时刷新界面即可。其次,转完一圈后的气泡效果的时间为 0.3 左右,符合Material Design 对手持设备动效时间的要求。
- Easing function上,左滑动画使用的是 ease-out, 又慢到快的划出屏幕,符合实际。圆的旋转是 linear, 时间是均匀流动的。
- 动画上的细节加在了气泡上,气泡是先缩小再放大,缩小是为了给接下来的放大提供一个预判,应用了 Anticipation 原理。其次是刻意夸张了缩小的效果,scale 0.5->0.1, opacity 0.1->1, 应用了 Exaggeration 原理。缩小时用的 easing function 是ease-in-out, 放大用的是 ease-out。符合客观规律。
评估:
- 逻辑:符合一致性。该动效实现了四个动效目的。响应时间还可以进一步优化。
- 时间:采用 Material Design 标准,可根据实际情况进一步优化
- 真实:Easing Function 符合实际情况。夸张部分动画为了突出动效效果。气泡破裂的感觉还可以进一步优化。
2
场景:Form
目的:State, Attention, Feedback, Individualization
制作:
笔者做的 Form 表单效果, 模仿的 Google 登陆。使用的 PageComponent 控制页面切换。由于 Framer 原声不支持表单输入控件,另外用到了 Github 上的一个 Input 插件模拟动态输入效果
细节优化:
- 头像添加一个背景色的改变,也就是动态的导入用户头像,用到了 Scale 属性。并同时把用户的账号显示在头像下方。
- 按钮添加 MouseDown 效果,监听用户单机事件,当鼠标按下时,按钮添加选中效果。鼠标放开时,效果消失,返回原状态。运用的是 Frame 的 State 变化机制。
- Easing function上,进入的效果都是 ease-out, 出去的效果都是 ease-in, 符合实际场景
- 注意一下小图标的触摸区域,要保证其足够大,很容易被手指点击到。即返回图标背后是有一块更大的透明区域用来接收点击事件。
评估:
- 逻辑:符合方向的一致性。该动效实现了四个动效目的。
- 时间:采用 Material Design 标准,可根据实际情况进一步优化
- 真实:Easing Function 符合实际情况。个性化还可以再提升,使其更有趣点。
3
场景:Stage
目的: Attention, Feedback, Relief, Individualization
制作:
笔者做的 Stage 点击效果,利用 boxShadow 的动态变化吸引用户注意力使其点击。然后使用 Svg 画圆形,并使用 Utils.modulate 动态控制 stroke-dashoffset 的变化形成动态圆。最后提示界面出现。
细节优化:
- 点击方块后,添加了一个先放大,再缩小的效果,运用了 Anticipation 的原理,使其更自然。
- 大方块缩小后,添加了一个方块像上移动同时变成圆的效果,最后和圆的起点连接在一起,使动画更整体,运用了 Second Animation 原理。
- Easing function上,进入的效果都是 ease-out, 出去的效果都是 ease-in, 圆使用的是 ease-out-in 给用户一种加载时的动态感,减少用户等待知觉
评估:
- 逻辑:该动效实现了四个动效目的。
- 时间:采用 Material Design 标准,可尝试多一些选择,看看有没有更有趣的
- 真实:Easing Function 符合实际情况。可以多试一些 Custom 的 easing-functions
4
场景:Menu
目的: State, Attention, Feedback, Individualization
制作:
笔者做的 Menu 菜单效果,利用 Rotate 属性动效变化菜单按钮的形状给用户反馈。菜单内容是三个独立的长方形,但是都是一个共同父元素的 Children, 方便通过父元素控制其整体移动。
细节优化:
- Icon 一开始是两条横线反方向旋转 45 度形成 X, 后来利用 Exaggeration 原理使其同方向旋转形成 90 夹角,所以第一条横线旋转了 145 度,看上去更有视觉效果。
- 菜单内容出现后,添加了一个移动效果,需要保证其速度足够快,不会让用户等待,同时增加了动画的趣味性。
- Easing function上,菜单按钮使用了 Spring 缓动,使其有弹性的感觉,增加趣味性。菜单进入的效果是 ease-out, 出去 ease-in, 出现后移动的效果是 ease-in-out
评估:
- 逻辑:该动效实现了四个动效目的。
- 时间:采用 Material Design 标准,保证其足够短。
- 真实:Easing Function 符合实际情况。长方形的分离,采用了 Material Design 标准。
5
场景: Transition
目的: State, Attention, Feedback, Individualization
制作:
笔者做的 Transition 效果,通过控制元素 x 位置和 Scale 属性,形成转场效果。
细节优化:
- 点击按钮后,按钮动态旋转并逐渐放大消失,控制其与新内容同时移动,营造新内容是由按钮产生的视觉错觉,运用了 Follow through 理论。
- 增加了点击后的 Ripple 效果,用于给用户即使反馈。
- Easing function上,进入的效果是 ease-out, 出去 ease-in。同时出去的时间要短于进入的,不重要的事件减少其用户等待时间。
评估:
- 逻辑:该动效实现了四个动效目的。
- 时间:采用 Material Design 标准,保证其足够短。
- 真实:Easing Function 符合实际情况。可以多试试一些别的趣味性效果,比如热气球的上浮感。
6
场景: Background
目的:Attention, Individualization
制作:
笔者做的 Background 效果,通过控制三层元素的 x 的位置,设置不同的速率,产生视差滚动的效果。反复执行动画即可。
细节优化:
- 近大远小,近实远虚,近快远慢。
- Easing function上,模拟上浮的效果,先慢后快。
评估:
- 逻辑:该动效实现了两个动效目的。在手机端笔者不建议使用 Background 效果,手机更注重快捷性,其屏幕大小有限,这种全屏动画占了手机屏幕所有空间,干扰更为重要的内容呈现。
- 时间:时间过长,更偏向视觉效果,而不是交互。
- 真实:如果是纯视觉效果,可以再添加一个气泡上升到顶部爆炸的效果。不过这种效果最好用 AE 做,再转成 gif 了,不太适合用 Layer 来模拟。
7
场景: Loading
目的: Attention, Relief, Individualization
制作:
笔者做的 Loading 效果,通过三角函数控制元素 x 位置和 y 位置,形成蝴蝶结路径效果。公式
x = midX + maxX * math.sin(二倍周期)
y = midY + maxY * math.sin(一倍周期)
注意,x 的周期保证为 y 周期的2倍,这样保证了 x 完成一圈的时候,y 完成了两圈,动态就成了蝴蝶结的形状。
细节优化:
- 增加了一个方向相反的圆,两个圆的移动更有 Loading 的感觉
- 当 2 个圆相遇时,动态改变其颜色,使动画更加有趣
- Easing function 这里用的是 Utils.interval 按照固定时间间隔进行变化的,因为软件不支持原生曲线运动,属于线性变化。
评估:
- 逻辑:该动效实现了三个动效目的。
- 时间:相对于最终的三角函数,时间上可以具体调试时改动。
- 真实:Easing Function 有待提高,现在只是线性,最好能模拟出中心具有引力的感觉,越距离中心越快,越远越慢。
8
场景:Scrolling
目的:State, Attention, Feedback, Individualization
制作:
笔者做的滚动出发卡片式折叠,模仿的“得到”APP。蓝色卡片分成上下两部分,然后拼合在一起。利用 CSS 的 RotationX 属性分别控制其旋转的角度。然后监听 Scrolling 事件,根据上滑,下滑的距离,动态控制 RotationX 实现其效果。
细节优化:
- 假定光都从上方照下,当卡片折叠时,会产生阴影,且上方阴影会比下方更重。所以笔者给上层和下层卡片分别加了一层动态变化的阴影。
- 由于现实世界的透视,近大远小,笔者利用 CSS 的 Perspective 属性使卡片具有该效果。
- 该动效属于实时响应,动效要对应操作,使其更具控制感,笔者没有考虑缓入和缓出动画效果(减少用户认知的干扰),使用的 Framer 内置的 Utils.modulate() 映射函数直接在 Scrolling 距离和卡片的 RotationX 上做的映射。
评估:
- 逻辑:实时响应,阴影,符合客观概率。该动效实现了 4 个动效目的。对 Perspective 属性还有待进一步研究,让透视看起来更逼真(透视大小,物体大小,人眼距离相匹配)。
- 时间:角度和距离直接映射,操作时视觉上感受良好。
- 真实:对真实世界运用规律的反映有待进一步加强(惯性)。卡片折痕处的效果还可以进一步优化,数学上研究一下三角函数,尽量准确计算出旋转角度和位移的关系。
9
场景:Hover
目的:State, Attention, Feedback, Individualization
制作:
笔者做的 LongPress 效果,因为手机场景并没有浏览器中的 Hover,所以笔者用了长按场景。主要还是 位置,透明度,大小 等属性的结合生成的效果。
细节优化:
- 爱心在缩小前,运用 Anticipation 原理先放大一点,让动画更流畅
- 点赞 Icon 和 数字的动态变化,让动效更具个性化
- 实时相应的部分使用 linear 函数,进入先快后慢,退出先慢后快
评估:
- 逻辑:反馈符合认知,用户能理解长按所具有的意义。实现了 4 个目的
- 时间:采用 Material Design 标准,保证其足够短。
- 真实:爱心的填充效果还可以优化成从底部上涨到顶部,更符合认知。这里受限于我没有找到 Framer 使用 Mask 的方法,没办法让爱心形状成为填充层的蒙板,所以改成了从中心扩线,以后学会了再改正。
10
场景:Image
目的:Attention, Individualization
制作:
笔者做的 Image 动画。两个图片层,循环滚动。把云朵层单独提取出来,通过位置上的控制,使其在指定时间产生移动的效果。
细节优化:
- 如果使用图片动画,插画的质量要保证足够好。颜色,渐变的使用符合常识。注意高光,阴影,渐变方向等细节。
- 添加了云层的移动,使2个动画图片之间产生了联系,有一种时间上的过度感,从白昼到黑夜。
评估:
- 逻辑:符合生活常识。实现了 2 个目的,个人还是不建议在手机使用图片效果,交互目的偏少,且需要消耗大量带宽。
- 时间:时间略长,可以设计一些时间短且有趣的图片动画。
- 真实:由于 Framer 不太适合制作纯视觉上的动效,多图层同时动画很容易导致浏览器渲染产生问题,动画看起来很抖动。这里的云层(只是个图片图层)只做了一个移动,更真实的可以做一个抖动效果。不过那样我觉的更适合使用 AE 制作成 Gif 再导出。但 Gif 会存在质量偏低的问题。使用 Svg 和 Canvas 技术来制作复杂的 Web 动效是更明智的选择。
感想##
1.做动效之前,先把静态稿做出来,便于条理的梳理,样式的统一。磨刀不误砍柴工嘛。并且像 Framer 这种支持直接导入 Sketch 文件的软件,仅作为展示时(不考虑文件大小),尽可以直接使用图片作为图层,省去了自己写css的时间。
2.由于 Photoshop 转 Gif 的能力有限,做动效时(如果要导出 Gif), 不要使用特别复杂的渐变,同时保证图片大小不要长宽别超过 800px。转 Gif 时,Gif 的抖动值选择在图片大小和图片清晰度之间做一个平衡即可。笔者一般直接开 4 联看效果,然后选择一个合适的,前提是你的电脑内存足够大,不然会很卡。
3.再耐心多一点,再多思考一点。笔者交互设计才入门,还有很多不足。动画部分会持续完善更新,也欢迎各位童鞋与我多多交流,共同进步。
其他##
Framer-Animations-for-10-Mobile-Interaction-Situations Github Address
参考资料##
- Cao, J. (2015, June 23). The changing face of animation & interaction design.Retrieved February 28, 2017, from https://thenextweb.com/dd/2015/06/23/the-changing-face-of-animation-interaction-design
- Cock, D. B. (2015, June 15). Lets move! Retrieved February 28, 2017, from https://www.youtube.com/watch?v=J6wUmQDQBkw&feature=youtu.be
- Cone, J. (2015, July 06). User interface design: Why motion matters (para. 4). Retrieved February 28, 2017, from http://motionographer.com/2015/07/06/user-interface-design-why-motion-matters/
- Cooper, A. (2014). About face: The essentials of interaction design (p. 266–267). Hoboken, NJ: John Wiley & Sons.
- Google. (2017) Material motion. Retrieved February 28, 2017, from https://material.io/guidelines/motion/material-motion.html
- Hazwani, A. A., & Bernard, T. (2016, January 18). Motion with Meaning: Semantic Animation in Interface Design (para. 11). Retrieved February 27, 2017, from https://alistapart.com/article/motion-with-meaning-semantic-animation-in-interface-design
- Johnston, O., & Thomas, F. (1981). The illusion of life: Disney animation (pp. 47–69). New York: Disney Editions.
- Kumar, V. (2013). 101 design methods: A structured approach for driving innovation in your organization. Hoboken, N.J: Wiley.* Saffer, D. (2013). Microinteractions (pp. 98–99). Sebastapol, CA: O'Reilly.
- Steve Jobs. (2003) (n.d.). Retrieved February 28, 2017, from https://en.wikiquote.org/wiki/Steve_Jobs
- Yalanska, M. (2016, June 29). Interface animation. The Force of Motion. Retrieved February 28, 2017, from https://tubikstudio.com/interface-animation-the-force-of-motion/