关于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 规定动画的速度曲线:

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

时间: 2024-09-29 07:27:11

关于css3 Animation动画的相关文章

css3 animation动画技巧

一,css3 animation动画前言 随着现在浏览器对css3的兼容性越来越好,使用css3动画来制作动画的例子也越来越广泛,也随着而来带来了许多的问题值得我们能思考.css3动画如何让物体运动更顺畅,css3动画如何做弧线动画,css3动画是否有动画库,css3帧动画如何快速简单……   为了解决这些折磨人的问题,我们今天来分析一下: 首先介绍css3 Animation动画库: http://daneden.github.io/animate.css/ 基本涵盖了我们常见的基础css3动

CSS3 Animation 动画

CSS3属性中有关于制作动画的三个属性:Transform,Transition,Animation: Animation主要是对元素实现了一些基本的动画效果,它只能应用在页面的DOM元素上. w3school在线文档说明 http://www.w3school.com.cn/css3/css3_animation.asp 不同浏览器兼容 div{ animation:; -moz-animation:; /* Firefox */ -webkit-animation:; /* Safari 和

CSS3 transition动画、CSS3 transform变换、CSS3 animation动画

CSS3 transition动画 1.transition-property 设置过渡的属性,比如:width height background-color2.transition-duration 设置过渡的时间,比如:1s 500ms3.transition-timing-function 设置过渡的运动方式 linear 匀速 ease 开始和结束慢速 ease-in 开始是慢速 ease-out 结束时慢速 ease-in-out 开始和结束时慢速 cubic-bezier(n,n,

css3 animation动画对应属性解释

animation Value:     [<animation-name> || <animation-duration> || <animation-timing-function> || <animation-delay> || <animation-iteration-count> || <animation-direction> || <animation-fill-mode>] [, [<animatio

css3 animation 动画属性简介

animation 动画属性介绍 animation 属性是一个简写属性,用于设置动画属性: 1. animation-name----规定需要绑定到选择器的 keyframe 名称. 语法:animation-name: keyframename|none: Keyframename:规定需要绑定到选择器的 keyframe 的名称. None: 规定无动画效果(可用于覆盖来自级联的动画). 例如: { -webkit-animation-name: my_animation; -moz-an

CSS3 animation动画与transition过渡比较

共同点 animation动画与transition过渡都可以实现动画效果,拥有下面共同的属性 animation:mymove 2s linear infinite alternate; transition: width 1s ease-out; 1.动画名称(name)@key-frame 2.过渡时间(duration)规定动画完成一个周期所花费的秒或毫秒.默认是 0. 3.延迟时间(delay)规定动画何时开始. 4.时间函数(timing-function)规定动画的速度曲线,默认是

CSS3 Animation动画

Animation自定义动画是CSS制作动画三个属性其中一个,CSS制作动画的三个元素有:Transform,Translate,Animation.元素所应用的动画名称,必须与规则@keyframes关键帧配合使用,因为动画名称由@keyframes定义. 而@keyframes关键帧有自己的语法规则,必须以@keyframes开头,后面接动画名称(自定义,语义化一点更好),然后在加对“{}”,括号中就是一些不同时间段样式规则. @keyframes语法:@keyframes<identifi

css3 animation动画事件

当使用css3时,会遇到利用@keyframes来定义动画事件,利用以下3个事件,能够捕捉当前元素的动画: AnimationEnd //动画结束时 AnimationStart  //动画開始 AnimationIteration  //动画每运行结束一次,这样的情况适用与animation-iteration-count大于1时. 对于transaction也有一个事件来捕获结束: transactionend $('.toggle-detail').on('transitionend',f

CSS3 animation动画,循环间的延时执行该怎么弄

在使用css做一些小的动画时,有些动画我们是需要其循环播放的,而且在部分动画中我们需要上一个循环与下一个循环之间存在一定的时间间隔,这个时候的animation-delay和transition-delay 只会在第一次动画开始的时候生效,而在两个循环之间是不生效的,这是我们就需要用其他的方法来实现循环之间的时间间隔. 方法:如下面的程序,我们可以把动画执行的总时间设置为4s,然后从75%开始,用后面的1s来做动画,前面的3s用作每次动画开始之前的延时,这样就可以解决循环播放delay失效的问题