关键帧

什么是关键帧。一如上面对Flash原理的描述一样,我们知道动画其实由许多静态画面组成,第一个这样的静态画面可以表述为一帧。其中关键帧是在动画过程中体现了物理明显变化的那些帧。

比如之前的例子中,元素div由50X50红色的大小变化到状态100X100 黄色的过程中,这一头一尾的两个状态起到了对动画定义的关键作用。所以这两个状态就是整个动画的关键帧。

@keyframes 定义动画关键帧

通过之前的胡说现在我们看到@keyframes就不会觉得这个@符号有多别扭了。我们使用它来定义动画的关键帧。

CSS代码中定义关键帧重要的两点是名称和时间点。

其中状态部分指定元素的样式,因此可以是各种你想要的CSS代码,颜色尺寸透明度旋转等。'from'指定了动画过程的开始状态,'to'指定了动画结束时元素的状态。所以整个动画也就是从from指定的开始状态变化到to指定的状态的过程。

假使我们已经创建好了一个HTML文档,其结构很简单只有一个用于呈现动画的div。

所以对于上面的例子,动画的定义大概是下面这个样子的:

  • 定义的动画取名'example'
  • 在'from'也就是动画开始时指定元素长50px宽50px,背景色为红色
  • 在'to'也就是动画结束时指定元素长100px宽100px,背景色为黄色
  • 对于使用webkit内核的浏览器比如Chrome,Safari需要使用-webkit-前缀,所以需要写两套代码,以保证在Chrome或Safari里能工作

当然对于状态的定义不局限于开始和结束两个时间点,我们可以指定一个动画过程中任何时间点元素的状态。下面是定义关键帧的另一种写法。

上面定义了整个动画过程中0%,50%,100%三个时间点元素的状态。比如我们定义了一个时长为10秒的动画,那么0%就是动画开始时0秒的时候,0%后面的代码指定元素在动画开始时是怎样的,然后50%也就是动画进行到5秒的时候,元素又是什么样子。最后100% 对于动画进行到10秒也就是动画结束时元素的状态。

因此用这种写法我们可以指定的元素状态数量没有限制,可以更精确地控制整个动画。

CSS3 animation属性

当我们使用@keyframes定义好了一个动画,它并不会执行产生任何效果,直到我们通过animation属性将动画应用到相应元素上。

对于 CSS3 animation 属性其完整的语法如下:

animation: name duration timing-function delay iteration-count direction;

  • name是使用@keyframes定义好的关键帧名称
  • duration从字面意思可知是指定动画持续时间
  • timing-function 指定动画以何种方式播放,具体指的是从元素的一个状态过渡到另一个状态所使用的方式,可用的值有linear,ease, ease-in, ease-out, ease-in-out, cubic-bezier(n,n,n,n)。每种方式的讨论超出了原计划,这里只是列出
  • delay指定一个延时让动画不立即播放
  • iteration-count 指定动画重复次数,可以指定一个数字,也可以使用'infinite'表示一直播放
  • direction指定动画是否反向播放或者交替着播放,可用的值有normal, reverse, alternate, alternate-reverse

其中name和duration 是必需的,如果不指定duration默认为0,也就是动画持续0秒,所以就无法看到动画效果。

在前面已经定义好了关键帧了,现在我们使用animation将其应用到相应元素上。

现在打开页面就会看到最上面那个动画效果了。

使用百分比指定关键帧的版本

上面介绍过通过百分比的形象我们可以指定动画过程中任何时间点时元素的状态,将上面的版本变为百分比版本是非常容易的事情。

我们只需把关键帧的定义由from to 改为想要的时间百分比即可。

比如开始的状态不改变,增加一个动画进行到50%时颜色为黄色大小为75X75,最后为绿色大小为100X100。

效果:

 

往复的动画

如果我们指定了direction为alternate的话,当动画播放到结尾时,它会以相反的方向回到动画开始的状态,然后一直这样交替播放。

 

有了上面的基本了解,我们可以写一些简单的动画了。但真正惊赞的CSS3动画是需要花一些功夫的,这里就不继续了,或许我会在下一篇中介绍一个例子。

Another working demo (请使用Chrome浏览器观看效果):

Reference:

转自:http://www.cnblogs.com/Wayou/p/first_glance_at_the_css3_animation.html

CSS3 动画animation的更多相关文章

  1. 前端CSS3动画animation用法

    前端CSS3动画animation用法 学习如下动画属性 @keyframes animation-name animation-duration animation-delay animation- ...

  2. css3 动画(animation)-简单入门

    css3之动画(animation) css3中我们可以使用动画,由于取代以前的gif图片,flash动画,以及部分javascript代码(相信有很多同学都用过jquery中的animate方法来做 ...

  3. CSS3 动画 animation和@keyframes

    CSS3 @keyframes 规则 如需在 CSS3 中创建动画,您需要学习 @keyframes 规则. @keyframes 规则用于创建动画.在 @keyframes 中规定某项 CSS 样式 ...

  4. CSS3动画animation认识,animate.css的使用

    CSS动画 可以取代js动画 在移动端会更加流畅! 下面是一个的绘制太阳系各大行星运行轨迹笔记,可以自学参考! -------------------------------------------- ...

  5. css3动画animation

    动画:animation   animations这物似乎还是只在webkit,moz核心的浏览器上起作用 <!DOCTYPE html><html lang="en&qu ...

  6. CSS3 动画Animation的8大属性

    animation复合属性.检索或设置对象所应用的动画特效. 如果有多个属性值时以","隔开,适用于所有元素,包含伪对象:after和:before 1.animation-nam ...

  7. css3动画-animation

    animation驱使一组css style变化到另外一组css style,它可以定义keyframes的集合,指定style的开始和结束状态,它是transition的增强. 配置animatio ...

  8. CSS3的变形transform、过渡transition、动画animation学习

    学习CSS3动画animation得先了解一些关于变形transform.过渡transition的知识 这些新属性大多在新版浏览器得到了支持,有些需要添加浏览器前缀(-webkit-.-moz-.- ...

  9. CSS3动画详解(结合实例)

    一.使用CSS3动画代替JS动画 JS动画频繁操作DOM导致效率非常低 在频繁的操作DOM和CSS时,浏览器会不停的执行重排(reflow)和重绘(repaint) 可以避免占用JS主线程 这边就不细 ...

随机推荐

  1. 蒙古人交友网站 www.mengguren.com

    蒙古人交友http://www.mengguren.com/ 经过一个多月的努力,终于上线了,虽然长得丑陋一些.功能简单一些,欢迎大家注册,方便别人能找到您.吉日嘎拉<252056973@qq. ...

  2. StaticFileMiddleware中间件如何处理针对文件请求

    StaticFileMiddleware中间件如何处理针对文件请求 我们通过<以Web的形式发布静态文件>和<条件请求与区间请求>中的实例演示,以及上面针对条件请求和区间请求的 ...

  3. 添加web引用和添加服务引用有什么区别?

    添加web引用和添加服务引用有什么区别,Add Service References 和 Add Web References 有啥区别?参考 http://social.microsoft.com/ ...

  4. freemarker语法简介

    ftl是一种模板标记语言,用于渲染数据,输入html结构.语法简介如下: ${book.name} ${book.name?if_exists} //值是否存在 ${book.name??} //值是 ...

  5. openssl_final学习总结

    openssl学习总结 openssl知识点总结 openssl实践总结 简介 openssl是一个功能丰富且自包含的开源安全工具箱.它提供的主要功能有: SSL协议实现(包括SSLv2.SSLv3和 ...

  6. Ajax基础详解1

    Ajax也是前端必备技能了,学习任何语言,都需要以理论为基础的大量实践才能真正学会,之前学了Ajax很多遍,因为缺乏大量实践,总是会忘.所以不实践是失败之母...当然理论基础也很重要啦,今天谈谈我对A ...

  7. zoeDylan.js框架-数据底层

    zoeDylan.js是墨芈自己写的一套前端框架,不过由于墨芈经验不足,所以框架内部代码有些混乱. 墨芈写这套框架的目的是为了存储以后做前端开发过程中的一些代码,简单的说这套框架就是一个大杂烩. 这套 ...

  8. java内存优化牛刀小试

    小猿做了两年的c++,上个月竟然被调到java项目,于是第一篇随笔就想八一八java的内存优化. 首先优化这种事,肯定是应该放到最后去做的,不过在写代码的过程中养成良好的习惯也是很重要的.在这里先推荐 ...

  9. Object C学习笔记23-继承,重写,重载

    前面的学习都一直在使用Object C对象,但是没有具体总结过Object C中的对象使用特性,这里简单总结一下. 一.  继承 在面向对象编程中,子类可以通过继承得到父类的可以继承的的属性和方法,在 ...

  10. jQuery应用之(二)使用jQuery管理选择结果(荐)

    使用jQuery选择出来的元素与数组非常类似,可以通过jQuery提供的一系列方法对其进行处理,包括长度.查找某个元素,截取某个段落等. 1.获取元素的个数. 在jQuery中可以通过size()方法 ...