关于css3 Animation动画

在介绍animation之前有必要先来了解一个东西,那就是“keyframes”,我们把他叫做“关键帧”;

在使用transition制作一个简单的transition效果时,包括了初始属性,最终属性以及完成过渡效果 所需的时间、速度曲线、开始时间;但是这些都无法控制的更细一些,比如说我要第一个时间段执行什么动作,第二个时间段执行什么动作,仅仅通过transition就很难实现;此时就需要“关键帧”这个东西,下面我们就来看看"keyframe";

“keyframe”命名是由"@keyframes"开头,后面紧接着是这个“动画的名称”,加上一对花括号“{}”,括号中就是一些不同时间段的样式规则(有点像我们css的 样式写法一样);一个"@keyframes"中的样式规则是由多个百分比构成的,从“0%”到"100%"之间;

我们可以在这个规则中创建多个百分比,在每一个百分比中给需要有动画效果的元素加上不同的属性,从而让元素达到一种在不断变化的效果,比如说移动,改变元素颜色,位置,大小,形状 等;

需要注意的是,我们使用“fromt” “to”来代表一个动画是从哪开始,到哪结束,也就是说这个 "from"就相当于"0%",而"to"相当于"100%"(注意:其中"0%"必须加上百分符号(“%”),如果没有加上的话,这个keyframes将是无效的,因为keyframes的单位只接受百分比值);

语法举个栗子:

  

Keyframes定义好了以后,我们需要怎么去调用刚才定义好的动画“myMove”呢?这时就需要给元素定义animation属性;

W3school网站上 animation有八个属性:

还有两个animation-play-state(规定动画正在运行还是暂停)、animation-fill-mode(规定动画在播放之前或之后,其动画效果是否可见);

接下来给元素定义Animation属性就可以调用刚刚写好的“myMove”动画了;直接上代码:

  

通过上面两段代码我们就能看到一个橘色的div宽度增加的效果了;

到这里关于animation的基本理论就介绍得差不多了;但是……大家有没有发现,以上产生的动画效果都是渐变过渡型的;这要从animation-timing-function说起,我们知道animation-timing-function 规定动画的速度曲线:

  image

animation-timing-function默认以ease方式过渡,除了ease,以上linear、cubic-bezier之类的过渡函数都会在每个关键帧之间插入补间动画,所以动画效果看起来是连贯性的;但是有些时候效果 不需要补间,而是需要关键帧之间的跳跃,其实timing-function的取值除了上述还有一个steps()函数;这时就应该使用steps过渡方式来实现帧跳跃的效果了;

steps() 函数指定了一个阶跃函数;他有两个参数,第一个参数指定了时间函数中的间隔数量(必须是正整数);第二个参数可选,接受 start 和 end 两个值,指定在每个间隔的起点或是终点发生阶跃变化,默认为 end;

steps() 第一个参数 number 为指定的间隔数,即把动画分为 n 步阶段性展示,这里容易错误地理解成就是keyframes写的变化次数,认为steps(5,start)中的5 就是指的keyframes中的0% 25% 50% 75% 100% 分成5个间隔等分;

@-webkit-keyframe name{

  0%    {    }

  25%  {    }

  50%  {    }

  75%  {    }

  100%{      }

}

实际上不是的;要理解第一个参数关键要理解他的针对点,这里需要引入一个核心点:timing-function 是作用于每两个关键帧之间的,而不是整个动画;

这样一来第一个参数就很好理解了,也就是说steps的设置都是针对两个关键帧之间的,而非是整个keyframes;所以第一个参数是设置了每一次step的变化次数,换句话说就是设置了 0-25 之间变化5次,25-50之间 变化5次 ,50-75 之间变化5次,以此类推;

第二个参数可选,接受 start 和 end 两个值,指定在每个间隔的起点或是终点发生阶跃变化,默认为 end ; 通过案例看下 step-start与step-end 的区别:

@-webkit-keyframes circle {
        0% {background: red}
        50%{background: yellow}
        100% {background: blue}
    }

step-start: 黄色与蓝色相互切换;

step-end: 红色与黄色相互切换;

2个参数都会选择性的跳过前后部分,start跳过0%,end跳过100%;

step-start在变化过程中,都是以下一帧的显示效果来填充间隔动画,所以0% 到 50%  直接就显示了黄色yellow;

step-end与上面相反,都是以上一帧的显示效果来填充间隔动画,所以0% 到 50% 直接就显示了红色red;

 

/********* ok,整理完了,就酱,吃饭去啦啦啦啦******/

 

本文帧动画部分内容参考自艾伦大神的《深入理解css 3 Animation帧动画》,原文地址如下:

by Aaron:http://www.cnblogs.com/aaronjs/p/4642015.html

 

 

 
 
 
posted @ 2015-12-19 17:07  Lazymr  阅读(367)  评论(0编辑  收藏  举报