内容来源:2017年6月18日,手淘前端技术专家大漠在“2017 iWeb峰会·第六届HTML5峰会 ”进行《手淘互动动效的探索》演讲分享。IT大咖说做为独家视频合做方,经主办方和讲者审阅受权发布。html
阅读字数:3089 | 6分钟阅读
如今的营销活动,用一张简单的图片去吸引消费者已经远远不够,必需要有能给消费者带来视觉冲击的东西,或者在动画过程当中提供更好的引导部分。手淘的前端团队经历了从Gif、视频到CSS Animation的从0-1的过程,并致力于研究的数据化驱动的动效。大漠将为咱们带来在手淘互动动效上的探索分享。前端
咱们之前访问Web页面是没有动画和动效的,甚至点击跳转的功能都不多。那时是纯粹的文字展现,图片在网站上也不多能看见。编程
最初点击一个连接跳到一个新的页面,这是一种交互。随着技术的变革,点击一个按钮会弹出一个窗口,这也是我之前认识的一种交互。如今咱们的交互行为变得更加复杂。json
用户无需进行任何操做,页面只是告诉用户去点击某个按钮能够进入一个页面或一个会场。这种交互行为在内部咱们称之为引流。浏览器
交互在咱们团队就是以上这些表现形式。网络
最先咱们只能看到PC端的Web页面,随着移动端的快速发展,移动端的互动方式也会愈来愈丰富。架构
最先实现动画的技术方案是Gif、视频,还有早期PC端看到的Flash页面,这些方案都是前端不用参与的。运维
可是Gif图放到移动端,会产生一些很差的后果。以及iOS不支持Flash,视频也有一些存在的风险。编程语言
在CSS3出现之后,你们作简单动画的时候会常常用到。还有一些SVG和Canvas动画。但其实这些都还不能知足咱们各类业务场景。工具
咱们今天的重点会放在JS-Driven Animation动画。
2015年,咱们团队经历了一个0-1的过程。在15年以前,各类大触看到的氛围和动效基本上是Gif图或是视频。15年年货节,咱们尝试了第一次的改变,经过前端CSS或JS的技术手段,把一个Gif图转换成动画效果。完成这个效果的时候,不管是需求方仍是产品都很满意,由于这种方案能够随时更改动画中的元素。
通过市场调研综合结果以后,咱们最终仍是选择本身“造轮子”。由于咱们但愿能够是本身控制的,不用担忧被别人起诉,也不担忧新功能没法在它的基础上进行扩展。
后来咱们通过一年的时间作了一个用JS驱动动画的工具Animation Flow Tool。
我我的喜欢把动画的管理看成是导演一场舞台剧,要指挥每一个演员什么时候出场,出来作什么,什么时候退场。在咱们的动画管理中有一个timeline,它很像导演的角色。
经过时间轴能够很好地控制动画的场景,包括它什么时候播放、什么时候中止、什么时候退出。
CSS是经过持续时间来实现控制,若是全部时间点都已经肯定了,这样作是没有问题的。
好比动画“火山升起”的时候发来1秒的时间,第二个动画“火焰柱喷发”是在“火山升起”结束后开始播放。这时就可知它的延迟时间是1秒,“岩浆流动”同时播放也是1秒。到了“红包喷发”的时候就须要进行计算,前面的动画播放4秒后再播放“红包喷发”,它的延迟是1.4秒。若是这时“火山升起”的持续时间有所变更,那么后续的全部时间都要从新进行计算。这是CSS管理动画最大的缺点之一。
后来咱们改变了一种模式,经过JS来监控第一段动画,并告诉后面的动画何时结束再能够开始播放。这时不管第一段动画如何改变,都不用担忧后面的动画。
CSS在手淘上实现的动效性质都是相同的,咱们把它定义为精灵动画和路径动画。通过一年咱们发现这两种动画是咱们业务中最多见的动画效果,因而就对它们进行了封装。
之前要把全部图案拼成一张图,而后经过Animation控制每一帧的播放。后来咱们经过API来控制。
好比一个图案从底部出现到顶部隐藏一共经历了80帧。按照之前CSS的动画实现方案,须要拼80张图片。在这80张小图里有40张多是相同的,CSS却不能把相同的图片利用起来。
而AFT的方案是能够的,也就是说在这个基础上最起码节省了40张图片。
在没有AFT的状况下,咱们作的是路径动画,经过translate来改变x和y轴的轨径位置。
咱们当时作这个动画效果描点描了好久,可是产品经理忽然提出不要Z形的路径,要改为S形,咱们又只好从新描S形的路径出来。有一位同事描了七套路径,需求方还不是很满意,由于用translate来描点,无论怎么描到没法达到流畅的效果。
后来咱们改用SVG的路径,不管需求方想要什么路径,只要找个SVG的制图软件导出路径节点就能够。这是咱们后来对路径动画作的改变。
若是之后CSS的路径动画属性获得浏览器的支持,能够直接用原生的CSS路径动画,也支持SVG导出的路径,实现路径动画,AFT就要退出历史舞台了。
骨骼动画是借助第三方平台的工具把骨骼动画作出来,导出它的json数据,拿到json数据再出动画效果。
最先的时候咱们是利用IDE导出一份json数据,经过第三方JS库来实现DOM的动画效果。
咱们的第二种方案是经过An/AE导出一份json数据,再经过前端的DSL层面来实现动画效果。
通过实验,这两种都不是咱们想要的实现方案,后来咱们对它进行了一些简单的改造。
第一部分是元素,第二部分是动效器,第三部分是引擎,最关键的一点是动画管理,也就是时间轴。
元素和动效是分离的,只要作动效,而后把动效赋予到元素上,再找引擎来渲染。
咱们专一于作管理动画,怎样把动画描述出来,怎样把动画串起来构成咱们所需业务的动画。这是AFT后面实现的底层架构,看上去没有之前那么复杂。
视觉设计提供一个Gif或视频文件和一个PSD文件,交付到前端。前端根据Gif或视频的动画效果,把整个动画繁衍出来。也就是AFT动画繁衍的过程。这个模式的沟通成本很是高。
前端只负责业务层的逻辑代码,视觉经过AE这种制做动画的工具去导出动画。要有业务逻辑,再经过前端加入业务逻辑。若是不要业务逻辑的话,就无需前端界入了。
AE导出的不是json数据,它作出一个视频,而后前端再经过代码繁衍。
经过动画编程语言进行实现,要什么效果就能繁衍出什么效果。
咱们提出了一个“动画工程师”的概念。咱们团队目前还在思考动画工程师应该作什么,动画工程师是否是能直接实现动画的过程就能够称之为动画工程师。但我我的认为远远不止这些,咱们还在思考探索中。
我今天的分享就到这里,感谢聆听!
相关推荐
近期活动