gogoend / blog

blogs, ideas, etc.
MIT License
9 stars 2 forks source link

Web Animation初探 #49

Open gogoend opened 4 years ago

gogoend commented 4 years ago

首先我们来进行一个小测试。打开浏览器开发者工具,选择页面中任意一个可见元素,然后在控制台键入以下代码:

// demo1 - gogoend
$0.animate(
    [
        {transform:'translate(0)'},
        {transform:'translate(100px)'}
    ],
    {duration:6000}
)

之后我们就发现 —— 该元素动了……

有意思,这到底是什么神奇的能力,居然让一个没有设置CSS动画的元素动了起来?笔者查了查资料,发现这里的 animate 函数来自于 Web Animations API 。

Web Animations API 是什么?

Web Animations API(下文简称”WAAPI“)是一种新的动画技术,用于驱动DOM元素产生动画。

上古时代,网页中元素的动画一般都是依赖于JavaScript来进行实现的;通常使用 jQuery 中的 animate函数、类似tween.js的动画库 或自己编写定时器来驱动动画。 CSS3 标准出现后,动画关键帧被定义在了 CSS 中,动画状态等可直接通过设置CSS属性来进行更改,开发者不必再手动地去维护定时器。 而 WAAPI 的出现,则又让动画回到了 JavaScript 中。那在WAAPI中,有哪些东西值得我们一探究竟呢?

参考资料:Web Animations API - Web APIs | MDN

document 对象上有关WAAPI的内容

document 对象上有 timeline 属性 和 getAnimations 方法。

timeline

返回当前文档的时间轴,形如:

DocumentTimeline {currentTime: 3517.912}

currentTime是当前文档自页面开始加载算起的时间

getAnimations

该函数返回了文档中所有正在执行、将要执行的动画

DOM 元素上有关WAAPI的内容

Element 原型上包含 animate 和 getAnimations 两个方法,这使得浏览器中所有 DOM 元素都具有以下两个方法。

animate( keyframes, options)

如demo1中的代码所示,animate函数接受两个参数,第一个参数是动画关键帧keyframes,第二个是动画时间的配置options —— 这看起来和笔者之前尝试封装的动画库Anikyu有所相似。

getAnimations( options )

该函数返回一组在当前对象上正在执行或将会执行的Animation对象。该函数可接受一个对象options作为可选参数:

Animation 对象

在demo1中,我们执行了DOM元素上的animate方法,该方法执行后,元素的动画就开始了,事实上该函数同时还返回了一个Animation对象。 可以说,Animation对象就是 Web Animations 的核心,其中包含有当前动画的状态与一系列控制动画进程的方法。

Animation 对象的属性

Animation 对象的事件

Animation 对象的方法