Web动画API教程1:创建基本动画

转载自http://www.w3cplus.com/css3/web-animations-api-tutorial-part-1-creating-a-basic-animation.html

我们已经初步了解了统一web动画API的内容,但是我们还没有真正去对规范的细节进行探讨,所以现在开始吧。

WAAPI为你提供了比你用于CSS动画更多的控件,但是在了解它们之前,我们先打一下基础:如何使用这个API创建一个基本的动画?

创建一个关键帧动画

如果你对CSS Transition和animation熟悉的话,下面的代码看起来应该不陌生。

var player = document.getElementById(‘toAnimate‘).animate([
    { transform: ‘scale(1)‘, opacity: 1, offset: 0 },
    { transform: ‘scale(.5)‘, opacity: .5, offset: .3 },
    { transform: ‘scale(.667)‘, opacity: .667, offset: .7875 },
    { transform: ‘scale(.6)‘, opacity: .6, offset: 1 }
  ], {
    duration: 700, //milliseconds
    easing: ‘ease-in-out‘, //‘linear‘, a bezier curve, etc.
    delay: 10, //milliseconds
    iterations: Infinity, //or a number
    direction: ‘alternate‘, //‘normal‘, ‘reverse‘, etc.
    fill: ‘forwards‘ //‘backwards‘, ‘both‘, ‘none‘, ‘auto‘
  });

为了便于比较,这里再创建一个等效的CSS关键帧动画

@keyframes emphasis {
  0% {
    transform: scale(1);
    opacity: 1;
  }
  39% {
    transform: scale(.5);
    opacity: .5;
  }
  78.75% {
    transform: scale(.667);
    opacity: .667;
  }
  100% {
    transform: scale(.6);
    opacity: .6;
  }
}
#toAnimate {
  animation: emphasis 700ms ease-in-out 10ms infinite alternate forwards;
}

我们把这段代码分解,然后一块一块进行讲解。

var player = document.getElementById(‘toAnimate‘).animate()

动画animate()会返回一个AnimationPlayer,帮助我们接下来做一些有趣的事情,所以你可能会希望创建一个变量来获取AnimationPlayer的引用。我们先找到我们想要添加动画的元素(这里我们直接用了document.getElementById),并调用animate函数。这个函数是规范中新增加的内容,所以你需要在使用前查看它的支持/是否存在,或者引入polyfill

animate函数传入两个参数,一个是KeyframeEffects数组,一个是AnimationEffectTimingProperties选项。基本上第一个参数会映射到你放到CSS @keyframes中的内容,第二个参数是你将在你的CSS规则中使用animation-*属性(或animation简写,像我前面用的那样)指定的内容。这里有个关键的好处是我们可以使用变量或重用先前定义的KeyframeEffects,而用CSS的话我们就会被限制只能使用我们先前定义的值。

var player = document.getElementById(‘toAnimate‘).animate([
    { transform: ‘scale(1)‘, opacity: 1 },
    { transform: ‘scale(.5)‘, opacity: .5 },
    { transform: ‘scale(.667)‘, opacity: .667 },
    { transform: ‘scale(.6)‘, opacity: .6 }
  ]);

对于每一个KeyframeEffect,我们把CSS中的百分比偏移量offset变成值为01的小数。它是可选的,如果你没有指定任何值,它们就会平均分布(所以如果你有三个,第一个的偏移量为0,第二个的偏移量为.5,第三个则为1)。你还可以指定一个easing属性,这和CSS中的animation-timing-function一样。KeyframeEffect中的其它属性也都是可以添加动画的属性。每个属性的值都应该和你在JavaScript中使用element.style指定的相匹配,即opacity的值应该是一个数字,而transform应该是字符串。

var player = document.getElementById(‘toAnimate‘).animate([], {
    duration: 700, //milliseconds
    easing: ‘ease-in-out‘, //‘linear‘, a bezier curve, etc.
    delay: 10, //milliseconds
    iterations: Infinity, //or a number
    direction: ‘alternate‘, //‘normal‘, ‘reverse‘, etc.
    fill: ‘forwards‘ //‘backwards‘, ‘both‘, ‘none‘, ‘auto‘
  });

timing属性映射到CSS动画属性,尽管有时有不同的名字。早期的代码示例我们只讨论主要的选项。

下面是一个使用polyfill的示例(但是如果你是在最新的Chrome中查看,它应该是使用原生浏览器实现)。第一列的灰色方块是用的WAAPI,第二列红色方块使用的是CSS关键帧。

下一节

现在我们知道了如何根据我们已知的CSS来制作同等效果的动画,我们接下来看看animate函数返回的AnimationPlayer对象。这才是它真正的提升了功能特性的地方。

时间: 2025-01-10 01:30:32

Web动画API教程1:创建基本动画的相关文章

Web动画API教程2:AnimationPlayer和Timeline

本文转载: Web动画API教程2:AnimationPlayer和Timeline

Web动画API教程: 总结

转载自http://www.w3cplus.com/css3/web-animations-api-tutorial-animations-conclusion.html 我们前面已经讲解了很多内容,而且希望能够解决Web动画API到底是什么的问题.在总结这个系列时,我们将回顾一下我们已经讨论的内容,然后再看一下有哪些内容还没有实现的. 为什么这么费心API呢? 在第一篇的导论中就已经讨论了API是如何应运而生,为了将CSS.JS.SVG创建动画的方法糅合到一起,提取它们的优点,提供一种统一的方

Web动画API教程4:GroupEffects 及 SequenceEffects

转载自http://www.w3cplus.com/css3/web-animations-api-tutorial-part-4-groupEffects-and-sequenceEffects.html 我们来继续我们关于Web动画API中多动画的探讨,讨论一下现在polyfill中提供的分组和序列功能. KeyframeEffects KeyframeEffect传入三个参数:要添加动画的元素.关键帧数组.时间函数timing选项.这些参数都是我们之前使用element.animate()

Web动画API教程3:多个动画

转载自http://www.w3cplus.com/css3/web-animations-api-tutorial-part-3-multiple-animations.html 在关于AnimationPlayer和时间轴的讨论之后,我们来看看多动画和多player吧. 给一个元素添加多个动画 在这个示例中,每个矩形被应用了三个动画(其中包括变换.透明度和颜色).你可以给一个元素多次调用animate(),类似CSS中的多动画. 使用的CSS: #toAnimate { animation:

Web动画API教程5:可爱的运动路径(Motion Path)

转载自http://www.w3cplus.com/css3/web-animations-api-tutorial-part-5-the-loveable-motion-path.html 终于.沿路径的动画,不再是SVG的专利! Motion Path:规范的当前方向 随着API规范已经制定好并且通过,运动路径motion path也先后出现了不同的形式.单方向最初看起来可能是Effect的形式(如上一篇中讨论的GroupEffect),但随后Motion Path作为一个CSS模块慢慢的一

google maps js v3 api教程(1) -- 创建一个地图

原文地址 google maps javascript官方文档:https://developers.google.com/maps/documentation/javascript/ 在创建地图之前,我们进入 Google Developers Console创建一个key,用于我们开发地图的身份验证(当然,没有key也可以进行接下来的教程) 创建一个简单的地图: <!DOCTYPE html> <html> <head> <title>Simple Ma

google maps js v3 api教程(3) -- 创建infowindow

原文地址 前面我们学习了地图和标记的创建.那么今天我们来学习怎样在地图上显示一个窗口(infowindow) infowindow构造函数为:InfoWindow(opts?:InfoWindowOptions). InfoWindowOptions对象指定用于显示信息窗口的初始化参数. InfoWindowOptions对象属性: content:包含一个文本字符串或信息窗口中显示DOM节点. pixelOffset:表示信息窗口的位置偏移. position:infowindow显示的位置(

【HTML5】Web Audio API打造超炫的音乐可视化效果

HTML5真是太多炫酷的东西了,其中Web Audio API算一个,琢磨着弄了个音乐可视化的demo,先上效果图: 项目演示:别说话,点我!  源码已经挂到github上了,有兴趣的同学也可以去star或者fork我,源码注释超清楚的哦~~之前看刘大神的文章和源码,感觉其他方面的内容太多了,对初学者来说可能一下子难以抓到Web Audio API的重点,所以我就从一个初学者的角度来给大家说说Web Audio API这些事吧. Web Audio API与HTML5提供的Audio标签并不是同

【ASP.NET Web API教程】2.4 创建Web API的帮助页面

参考页面: http://www.yuanjiaocheng.net/CSharp/csharprumenshili.html http://www.yuanjiaocheng.net/entity/mode-first.html http://www.yuanjiaocheng.net/entity/database-first.html http://www.yuanjiaocheng.net/entity/choose-development-approach.html http://ww