目录
一、远观:认识WAAPI
二、入门:从实例开始
三、进院:细数WAAPI众妙
动画回调与动画状态
时间控制与时间轴
多个动画
更高级的接口
四、登堂:官方案例
五、上座:移动端运行
六、品茗:参考文献
首页 web前端 html教程 Web Animation API 从入门到上座_html/css_WEB-ITnose

Web Animation API 从入门到上座_html/css_WEB-ITnose

Jun 21, 2016 am 09:01 AM

一、远观:认识WAAPI

当我们谈及网页动画时,自然联想到的是CSS3动画、JS动画、SVG动画、APNG动画等技术以及jQuery.animate()等动画封装库,根据实际动画内容设计去选择不同的实现方式。然而,每个现行的动画技术都存在一定的缺点,如CSS3动画必须通过JS去获取动态改变的值,setInterval的时间往往是不精确的而且还会卡顿,APNG动画会带来文件体积较大的困扰,引入额外的动画封装库也并非对性能敏感的业务适用。目前情形对开发者而言,鱼和熊掌似乎不可兼得,既希望获得更强大便捷的动画控制能力,又希望性能和体验上足够流畅优雅,如果能有一种浏览器原生支持的通用的动画解决方案,那将是极好极好的呢。

W3C提出Web Animation API(简称WAAPI)正缘于此,它致力于集合CSS3动画的性能、JavaScript的灵活、动画库的丰富等各家所长,将尽可能多的动画控制由原生浏览器实现,并添加许多CSS不具备的变量、控制以及或调的选项。看起来一切都很棒,是不是以后我们在动画技术选型上可以一招鲜吃遍天了呢?接下来请跟我一起敲开Web Animation API的奇妙之门。

二、入门:从实例开始

WAAPI核心在于提供了

Element.animate()
登录后复制

方法,下面看个最简单的例子:

document.body.animate(    [{'background': 'red'}, {'background': 'green'}, {'background': 'blue'}]    , 3000);
登录后复制

使用Chrome 39以上的浏览器运行一下,页面背景色进行了红绿蓝的依次过渡,3s后结束。我们当然是不会满足于这么简单的控制参数,继续看下个例子:

  var dot = document.querySelector('.dot');  var frames = [    {transform: 'rotate(0deg) translate(80px)'},    {transform: 'rotate(360deg) translate(80px) '},  ];  var timing = {    duration: 2500,         //ms    delay: 0,               //ms    iterations: Infinity,   //1, 2, 3 ... Infinity    direction: 'alternate', //'normal', 'reverse'等    easing: 'ease-in-out',  //'linear', 'ease-in'等    fill: 'forwards',       //'backwards', 'both', 'none', 'auto'  };  dot.animate(frames, timing);
登录后复制

可以看到DOM节点具备全新的animate方法,第一个参数是关键帧数组frames[],对应CSS3中的@keyframes,每一帧的描述与css3极其类似;第二个参数是时间控制timing,包括有duration持续时间、iterations执行次数、direction动画方向、easing缓动函数等属性。是不是很像CSS3的语法,以上timing参数等同于:

.dot {  animation: frames 2500ms ease-in-out 0ms infinite alternate forwards;}
登录后复制

效果如下所示:

三、进院:细数WAAPI众妙

动画回调与动画状态

在最初的例子中,我们可以定义一个对象来接收Element.animate()的返回值,如:

var player = document.body.animate(/* ... */);
登录后复制

player即成为该动画返回的一个“动画播放器”对象,同时动画开始播放。我们需要了解动画当前的状态,可以通过该对象的只读属性playState来获得:

console.log(player.playState); //"running","paused","finished"...
登录后复制

播放器共有五种状态,除了代码中注释的三种基本状态,还包括"idle"表示恢复到初始状态,"pending"表示播放或者暂停即将发生时。

播放器可以通过四种方法可以改变动画当前的状态。

player.pause(); //"paused"player.play();  //"running"player.cancel(); //"idle"player.finish(); //"finished"
登录后复制

与CSS3动画类似,player可以为动画自然结束或者手动结束时指定一个onfinish函数。

player.onfinish = function(e) {    // ...}
登录后复制

请注意,设置播放次数Infinity的动画没有自然结束的时机去调用onfinish函数。

时间控制与时间轴

播放器player具有一个读写属性playbackRate,用于控制动画的播放速度。

var player = element.animate(/* ... */);console.log(player.playbackRate); //1player.playbackRate = 2; 
登录后复制

playbackRate默认值为1,可以通过设置更大的整数使得动画加速,也可以通过设置大于零的小数来使得动画减缓播放速度。

player还具有两个与时间相关的读写属性currentTime和startTime。前者返回动画当前过去的毫秒数,它的最大值是timing参数设置的delay+(duration*iterations),而设置Infinity的动画没有currentTime的最大值。

当设置了playbackRate时,动画的currentTime并不会发生变化,真正变化的是时间轴,播放速度改变使得时间轴被相应拉伸或者压缩。

播放器可以调用reverse()倒叙播放动画,由时间轴的终点走向起点,动画结束时currentTime的值回到0。

player.onfinish = function() {    player.reverse();}
登录后复制

多个动画

CSS3动画是可以同时指定多个keyframes动画到一个DOM节点上,WAAPI同样具备应用多个动画的能力。在一个元素上多次调用animate方法,即实现了一个元素多个动画:

var animated = document.getElementById('toAnimate');var pulseKeyframes, activateKeyframes, haveFunKeyframes;var pulse = animated.animate(pulseKeyframes, 1000); var activate = animated.animate(activateKeyframes, 3000);var haveFunWithIt = animated.animate(haveFunKeyframes, 2500);
登录后复制

每个子动画也拥有独立的timing参数,以及独立的动画状态(播放、停止、完成、取消)和独立的时间轴(启动时间、播放速度和结束时间),方便动画进行细节控制。

更高级的接口

WAAPI还拥有timeline属性,对动画进行分组和排序的能力,以及沿自定义路径移动(再也不是SVG的天下了)的能力,光这一点就足够令人激动不已,然而篇幅有限于是下回再表。

四、登堂:官方案例

Codelabs 越来越多基于WAAPI的Codelabs实例涌现,这些实例非常适合初接触WAAPI的同学作为开始的范例。 [https://github.com/web-animations/web-animations-codelabs]

Google’s demos 如果你希望用WAAPI挑战更炫酷的动画,特别是遵循Material Design风格的动画效果,这将是不错的灵感来源。 [http://web-animations.github.io/web-animations-demos]

五、上座:移动端运行

看到这里,相信你已经不只一次体验到WAAPI带来的惊喜。作为一名彻头彻尾的移动端H5开发,我当然也想把WAAPI应用到移动业务上去服务用户…什么?手机上怎么没效果!

[http://caniuse.com/#feat=web-animation]

为了在现代浏览器厂商还没完全跟进到位的时候抢先用上WAAPI,我们可以选择引入针对Web Animation API的Polyfill库[https://github.com/web-animations/web-animations-js],从而在IE/Firefox/Safari等浏览器上体验到WAAPI的精彩。

<scriptsrc="https://cdn.jsdelivr.net/web-animations/latest/web-animations.min.js"></script><script>  document.body.animate([    {'background': 'red'},    {'background': 'green'}  ], 1000);</script>
登录后复制

移动端浏览器,Android 5.0以上的Android Browser和Chrome for Android本身就已经支持WAAPI了,加上Polyfill之后,iOS的Safari也支持了。别忘了,还有我大手Q的X5内核浏览器。

至此,小伙伴们终于露出欣慰的笑容。敬请期待下篇《Web Animation API 从上座到书墨》。

六、品茗:参考文献

  1. W3C Spec:https://w3c.github.io/web-animations/
  2. 《Let’s talk about the Web Animations API》:http://danielcwilson.com/blog/2015/07/animations-intro/
  3. Google's Demo:http://web-animations.github.io/web-animations-demos/
  4. codelabs: https://github.com/web-animations/web-animations-codelabs
  5. Polyfill: https://github.com/web-animations/web-animations-js
  6. Resources:https://developers.google.com/web/updates/2015/10/web-animations-resources
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1669
14
CakePHP 教程
1428
52
Laravel 教程
1329
25
PHP教程
1273
29
C# 教程
1256
24
HTML:结构,CSS:样式,JavaScript:行为 HTML:结构,CSS:样式,JavaScript:行为 Apr 18, 2025 am 12:09 AM

HTML、CSS和JavaScript在Web开发中的作用分别是:1.HTML定义网页结构,2.CSS控制网页样式,3.JavaScript添加动态行为。它们共同构建了现代网站的框架、美观和交互性。

HTML,CSS和JavaScript的未来:网络开发趋势 HTML,CSS和JavaScript的未来:网络开发趋势 Apr 19, 2025 am 12:02 AM

HTML的未来趋势是语义化和Web组件,CSS的未来趋势是CSS-in-JS和CSSHoudini,JavaScript的未来趋势是WebAssembly和Serverless。1.HTML的语义化提高可访问性和SEO效果,Web组件提升开发效率但需注意浏览器兼容性。2.CSS-in-JS增强样式管理灵活性但可能增大文件体积,CSSHoudini允许直接操作CSS渲染。3.WebAssembly优化浏览器应用性能但学习曲线陡,Serverless简化开发但需优化冷启动问题。

HTML的未来:网络设计的发展和趋势 HTML的未来:网络设计的发展和趋势 Apr 17, 2025 am 12:12 AM

HTML的未来充满了无限可能。1)新功能和标准将包括更多的语义化标签和WebComponents的普及。2)网页设计趋势将继续向响应式和无障碍设计发展。3)性能优化将通过响应式图片加载和延迟加载技术提升用户体验。

HTML:建立网页的结构 HTML:建立网页的结构 Apr 14, 2025 am 12:14 AM

HTML是构建网页结构的基石。1.HTML定义内容结构和语义,使用、、等标签。2.提供语义化标记,如、、等,提升SEO效果。3.通过标签实现用户交互,需注意表单验证。4.使用、等高级元素结合JavaScript实现动态效果。5.常见错误包括标签未闭合和属性值未加引号,需使用验证工具。6.优化策略包括减少HTTP请求、压缩HTML、使用语义化标签等。

HTML与CSS vs. JavaScript:比较概述 HTML与CSS vs. JavaScript:比较概述 Apr 16, 2025 am 12:04 AM

HTML、CSS和JavaScript在网页开发中的角色分别是:HTML负责内容结构,CSS负责样式,JavaScript负责动态行为。1.HTML通过标签定义网页结构和内容,确保语义化。2.CSS通过选择器和属性控制网页样式,使其美观易读。3.JavaScript通过脚本控制网页行为,实现动态和交互功能。

HTML与CSS和JavaScript:比较Web技术 HTML与CSS和JavaScript:比较Web技术 Apr 23, 2025 am 12:05 AM

HTML、CSS和JavaScript是构建现代网页的核心技术:1.HTML定义网页结构,2.CSS负责网页外观,3.JavaScript提供网页动态和交互性,它们共同作用,打造出用户体验良好的网站。

HTML:是编程语言还是其他? HTML:是编程语言还是其他? Apr 15, 2025 am 12:13 AM

HTMLISNOTAPROGRAMMENGUAGE; ITISAMARKUMARKUPLAGUAGE.1)htmlStructures andFormatSwebContentusingtags.2)itworkswithcsssforstylingandjavascript for Interactivity,增强WebevebDevelopment。

&lt; strong&gt;,lt; b&gt;有什么区别标签和lt; em&gt;,&lt; i&gt;标签? &lt; strong&gt;,lt; b&gt;有什么区别标签和lt; em&gt;,&lt; i&gt;标签? Apr 28, 2025 pm 05:42 PM

本文讨论了HTML标签,和和关注其语义与表现用途及其对SEO和可访问性的影响之间的差异。

See all articles