W3C里的定义:

animation-timing-function 规定动画的速度曲线。

这个属性有很多取值,

linear:
线性过渡。等同于贝塞尔曲线(0.0, 0.0, 1.0, 1.0)
ease:
平滑过渡。等同于贝塞尔曲线(0.25, 0.1, 0.25, 1.0)
ease-in:
由慢到快。等同于贝塞尔曲线(0.42, 0, 1.0, 1.0)
ease-out:
由快到慢。等同于贝塞尔曲线(0, 0, 0.58, 1.0)
ease-in-out:
由慢到快再到慢。等同于贝塞尔曲线(0.42, 0, 0.58, 1.0)
step-start:
等同于 steps(1, start)
step-end:
等同于 steps(1, end)
steps(<integer>[, [ start | end ] ]?):
接受两个参数的步进函数。第一个参数必须为正整数,指定函数的步数。第二个参数取值可以是start或end,指定每一步的值发生变化的时间点。第二个参数是可选的,默认值为end。
cubic-bezier(<number>, <number>, <number>, <number>):
特定的贝塞尔曲线类型,4个数值需在[0, 1]区间内

然后今天我想巴拉的是steps(1,start)和steps(1,end)的区别;

首先,

steps(<integer>[, [ start | end ] ]?):

接受两个参数的步进函数。

第一个参数必须为正整数,指定了函数中的间隔数量。

第二个参数取值可以是start或end,指定每一步的值发生变化的时间点。

第二个参数是可选的,默认值为end。

step-start等同于steps(1,start),动画分成1步,动画执行时为开始左侧端点的部分为开始;

step-end等同于steps(1,end):动画分成一步,动画执行时以结尾端点为开始,默认值为end。

上例子吧!


  .bird{
    min-width: 91px;
    min-height: 71px;
    background: url(../img/bird.png) -182px 0px no-repeat;
  }

.birdFly {
animation: bird-slow 900ms infinite steps(1,start);
}
@keyframes bird-slow{
0% {
background-position: -182px 0px;//第三只小鸟
}
50% {
background-position: 0px 0px;//第一只小鸟
}
75% {
background-position: -91px 0px;//第二只小鸟
}
100% {
background-position: -182px 0px;//第三只小鸟
}
}

图片是这张雪碧图;动画效果就是模拟小鸟展翅飞翔,一直扇动翅膀;默认是先显示第三只小鸟

steps(1,start);第一个参数为1的意思就是,每俩关键帧之间只要1步完成,也就是0%-50%,只分为一步完成,50%-75%,也是一步完成;以此类推;注意steps的设置都是针对两个关键帧之间的,而非是整个keyframes;

timing-function 作用于每两个关键帧之间,而不是整个动画。

steps(1,start) : 第一只鸟和第二只鸟相互切换
steps(1,end) : 第三只鸟和第一只鸟相互切换

start跳过0%,end跳过100%

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

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

然后思考下,此时我们设置成start,小鸟会是怎样的呢?

答案是:

start:进入页面就会显示第一只小鸟,因为跳过了0%;

end:进入页面就会显示第三只小鸟,因为跳过了100%;

所以如果你一进来想显示小鸟展翅的样子就得是start,如果是一进来展示小鸟收翅膀的样子,那就设置成end;

个人觉得一进来看到小鸟展翅的样子还是比较喜欢的,哇哈哈哈、

再说下"forwards"和"infinite"

使用"forwards"和"infinite"对步数的的作用是不同的。

如果我们改变成"infinite",将不会出现"100%",因为"forwards"命令使动画在我们设置的步数外添加了额外的一步。

"forwards"使动画保持结束时的状态,所以在步数执行完毕后,动画会跳到最后一帧的状态并保持不变。

(做那种雨滴滴下来,然后种子就发芽,然后就长成了参天大树,就定格到最后一帧的大树的效果;animation: grow 4s steps(36) forwards;这里的steps是你的雪碧图里的图片的数量减一哦)

.sapling .seed.active{
background: url(../images/img2.png) no-repeat;
width: 330px;
height:430px;
left: 373px;
bottom: 250px;
animation:grow 4s steps(36) forwards; //37张图 减去一张
-webkit-animation:grow 4s steps(36) forwards;
} @keyframes grow {
from {
background-position: 0 0
}
to {
//雪碧图总高15910px 这里减去一张图的高度
background-position: 0 -15480px
}
}

  

总结:

steps函数,它可以传入两个参数,第一个是分成多少步完成,第二个参数可选,决定显示效果(是上一帧填充还是下一帧填充);

steps的设置都是针对两个关键帧之间的,而非是整个keyframes;

timing-function 作用于每两个关键帧之间,而不是整个动画;

"forwards"命令使动画在我们设置的步数外添加了额外的一步。

animation-timing-function的steps详解的更多相关文章

  1. animation-timing-function: steps() 详解

    在应用 CSS3 渐变/动画时,有个控制时间的属性 <animation-timing-function> .它的取值中除了常用到的 贝萨尔曲线以外,还有个让人比较困惑的 steps()  ...

  2. (function($){...})(jQuery) 函数详解

    function(arg){...} 这是一个匿名函数,参数是arg. 而调用匿名函数时,是在函数后面写上括号和实参的,由于操作符的优先级,函数本身也需要用括号,即: function(arg){.. ...

  3. JavaScript Function.apply() 函数详解

    apply()函数用于调用当前函数functionObject,并可同时使用指定对象thisObj作为本次函数执行时函数内部的this指针引用. 该函数属于Function对象,所有主流浏览器均支持该 ...

  4. JavaScript Function.arguments 属性详解

    语法 [functionObject.]arguments arguments属性是正在执行的函数的内置属性,返回该函数的arguments对象.arguments对象包含了调用该函数时所传入的实际参 ...

  5. JavaScript Function.call() 函数详解

    语法 functionObject.call( [ thisObj [, arg1 [, arg2 [, args...]]]] ) call()函数用于调用当前函数functionObject,并可 ...

  6. ExtJS:GridPanel之renderer:function()和itemdblclick : function()方法参数详解

    要使用GridPanel,首先要定义Store,而在创建Store的时候必须要有Model,因此我们首先来定义Model: Ext.define("Gpsdata", { exte ...

  7. android animation中的参数interpolator详解

      android:interpolator interpolator 被用来修饰动画效果,定义动画的变化率,可以使存在的动画效果可以 accelerated(加速),decelerated(减速), ...

  8. 超级强大的SVG SMIL animation动画详解

    本文花费精力惊人,具有先驱前瞻性,转载规则以及申明见文末,当心予以追究.本文地址:http://www.zhangxinxu.com/wordpress/?p=4333 //zxx: 本文的SVG在有 ...

  9. js Function 加不加new 详解

    以下来自:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new The new operato ...

随机推荐

  1. SSH三大框架整合案例

    SSH三大框架的整合   SSH三个框架的知识点 一.Hibernate框架 1. Hibernate的核心配置文件 1.1 数据库信息.连接池配置 1.2 Hibernate信息 1.3 映射配置 ...

  2. Welcome to StackEdit!

    Welcome to StackEdit! Hey!our first Markdown document in StackEdit1. Don't delete me, I'm very helpf ...

  3. Beta冲刺NO.6

    Beta冲刺 第六天 1. 昨天的困难 1.对于设计模式的应用不熟悉,所以在应用上出现了很大的困难. 2.SSH中数据库的管理是用HQL语句实现的,所以在多表查询时出现了很大的问题. 3.页面结构太凌 ...

  4. 201621123040《Java程序设计》第九周学习总结

    1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容 泛型部分思维导图 集合部分学习总结 java.util.Collection 是一个集合接口;java.util. ...

  5. 数据结构——线性表——队列(queue)

    队列也是一种特殊的线性表,它的特点是先入先出(FIFO,即first in first out).它的意思也很直观,想象一下排队买票,先排的人先买(插队是不对的,所以别去想).它也是很常用的数据结构, ...

  6. 【iOS】字号问题

    一,ps和pt转换 px:相对长度单位.像素(Pixel).(PS字体) pt:绝对长度单位.点(Point).(iOS字体) 公式如下: pt=(px/96)*72. 二,字体间转换 1in = 2 ...

  7. day-1 用python编写一个简易的FTP服务器

    从某宝上购买了一份<Python神经网络深度学习>课程,按照视频教程,用python语言,写了一个简易的FTP服务端和客户端程序,以前也用C++写过聊天程序,编程思路差不多,但是pytho ...

  8. mysql常用命令整理

    #不压缩备份 mysqldump -u root -p userpassword databasename > /tmp/backupfile.sql #压缩备份 mysqldump -u ro ...

  9. 源码解析Flask的配置文件

    在flask里,我们常在主文件中定义某些配置,比如: app.debug = True app.secret_key = 'helloworld!!' 实际上,flask中默认可以进行可选的配置项有很 ...

  10. Python爬虫之urllib模块2

    Python爬虫之urllib模块2 本文来自网友投稿 作者:PG-55,一个待毕业待就业的二流大学生. 看了一下上一节的反馈,有些同学认为这个没什么意义,也有的同学觉得太简单,关于Beautiful ...