timing-function: steps()
animation语法
animation:name duration timing-function delay iteration-count direction
timing-function取值
timeing-function: linear / ease / ease-in / ease-out / ease-in-out / cubic-bezier() / steps()
上面steps()不常用到却有时候非常有用,它是帧动画,其他值都是补间动画(线性动画),有时候一些动画效果必须用它才能实现,例如:今日头条,我们一般用其配合背景的变化制作一些有意思的帧动画。
steps()
steps()有两个参数,其中第一个参数是:每个关键帧之间执行次数,取值为正整数,第二个参数是:指定使用每个关键帧的起点或终点,取值为start或end,它有两个简写形式step-start相当于steps(1,start),step-end相当于steps(1,end)。
使用

假如上面是一张200 * 800的图片,我想实现在Hover的时候从A变化到A的逐帧动画,可以用以下方法来实现:
方法一:
.way1:hover{
/*在移上去的瞬间变成B,因为start会忽略开始帧*/
animation: way1 2s steps(3,start);/*ABCDA*/
animation: way1 2s steps(3,end);/*ABCA,因为end会忽略结束帧*/
}
@keyframes way1{
0%{
background-position: 0 0;
}
/*1/3{
background-position: 0 -200px;
}
2/3{
background-position: 0 -400px;
}*/
100%{
background-position: 0 -600px;
/*background-position: 0 100%;*/
}
}
方法二:
.way2:hover{
/*第一句*/animation: way2 2s steps(4,start);/*ABCDA*/
/*第二句*/animation: way2 2s steps(4,end);/*ABCDA*/
/*第三句*/animation: way2 2s steps(4,end) forwards;/*ABCDA*/
}
@keyframes way2{
/*实现一个从A到A的动画,推荐下面这样写,这样就不用纠结用start或end了,但其实用start或end还会有一丁点区别,就是start会立即到下一帧,end则不会*/
0%{
background-position: 0 800px; /*A*/
}
/*25%{
background-position: 0 600px; B
}
50%{
background-position: 0 400px; C
}
75%{
background-position: 0 200px; D
}*/
100%{
background-position: 0 0; /*A*/
}
}
/*下面这种写法和@keyframes way2是一样的*/
@keyframes way3{
0%{
background-position: 0 0; /*A*/
}
/*25%{
background-position: 0 -200px; B
}
50%{
background-position: 0 -400px; C
}
75%{
background-position: 0 -600px; D
}*/
100%{
background-position: 0 -800px; /*A*/
}
}
上面.way2:hover{}中“第二句”的写法会忽略最后的100%,但一个动画执行完还是会默认回到0%,所以我们看到的还是ABCDA。“第三句”的写法比较有意思,end会忽略100%,forwards又会停在最后一帧,这时候听谁的呢?答案:forwards。虽然“第二句”和“第三句”虽然看到的结果没有任何区别,但实际动画最后一次执行的帧却不同,“第二句”会跳过100%,“第三句”则不会,为了证明这一点看一个颜色变化例子就明白了。
颜色变化例子
.test:hover{
animation: colorChange 2s step-end;/*红绿*/
animation: colorChange 2s step-end forwards;/*红绿蓝*/
}
@keyframes colorChange{
0%{
background: red;
}
50%{
background: green;
}
100%{
background: blue;
}
}
利用steps()配合设计还可以作出好多有意思小东西,有兴趣可以去发掘。今日头条H5下载、倒计时
以上对steps()的分析都是从经验/测试/自己理解中得出的,非原理上的,所以可能出现不准确,发现望指正,谢谢!
.shan {
position: absolute;
top: 0;
left: 0;
overflow: hidden;
width: 235px;
height: 235px;
background-image: url(aaa.png);
background-repeat: no-repeat;
transform: translateZ(0);
animation: change .5s steps(2,end) infinite;
}
@keyframes change{
0%{
background-position:0 0;
}
100%{
background-position:-470px 0;
}
}
使用rem不能精确到数字时,可以用关键字来定位
.box{
height: 4.693333rem;
background: url(./aaa.png) no-repeat left top;
background-size: 10rem auto;
animation: change 1.2s step-start infinite;
}
@keyframes change{
50%{
background-position: left bottom;
}
}
timing-function: steps()的更多相关文章
- 【译】css动画里的steps()用法详解
原文地址:http://designmodo.com/steps-c... 原文作者:Joni Trythall 我想你在css 动画里使用steps()会和我一样有很多困惑.一开始我不清楚怎样使用它 ...
- 利用CSS3 中steps()制用动画
.monster { width: 190px; height: 240px; margin: 2% auto; background: url('http://treehouse-code-samp ...
- 浅谈CSS3动画的凌波微步--steps()
背景 一日敲代码的我,得到一个需求:写一个10秒的倒计时. 用JavaScript定时器麻溜写完之后,恰好同事勇司机接完水.瞟了一眼,然后凑过来说,这个用CSS3也可以写,而且一行JavaScript ...
- AWS Step Function Serverless Applications
Installing VS Components To follow along with this article, you must have an AWS account and install ...
- css3 animation 中的 steps
steps Specifies a stepping function, described above, taking two parameters. The first parameter spe ...
- CSS 3学习——transition 过渡
以下内容根据官方规范翻译以及自己的理解整理. 1.介绍 这篇文档介绍能够实现隐式过渡的CSS新特性.文档中介绍的CSS新特性描述了CSS属性的值如何在给定的时间内平滑地从一个值变为另一个值. 2.过渡 ...
- css3 animation 属性众妙
转自:凹凸实验室(https://aotu.io/notes/2016/11/28/css3-animation-properties/) 本文不会详细介绍每个 css3 animation 属性(需 ...
- transition和animation动画简介
本文介绍CSS动画的两大组成部分:transition和animation.我不打算给出每一条属性的详尽介绍,那样可以写一本书.这篇文章只是一个简介,帮助初学者了解全貌,同时又是一个快速指南,当你想不 ...
- css小细节罗列
有空时候把一些常见可能不是每个人都知道的css小细节总结了下,共勉. 1.line-height 众多周知,line-height是行高的意思,我们时常会使用类似line-height:24px;这样 ...
- 02-移动端开发教程-CSS3新特性(中)
1. 新的背景 背景在CSS3中也得到很大程度的增强,比如背景图片尺寸.背景裁切区域.背景定位参照点.多重背景等. 1.1 background-size设置背景图片的尺寸 cover会自动调整缩放比 ...
随机推荐
- 【转载】ASP.NET之旅--深入浅出解读IIS架构
在学习Asp.net时,发现大多数作者都是站在一个比较高的层次上讲解Asp.Net. 他们耐心. 细致地告诉你如何一步步拖放控件. 设置控件属性.编写 CodeBehind代码,以实现某个特定的功能. ...
- QTreeWidget 的用法
Qt QTreeWidget 新建一个Qt Widgets Application,拖拽一个Tree Widget 到 ui 界面上,最后实现的效果如下: 添加代码 //test.h //在头文件里添 ...
- CxImage新手教程,图文并茂
作为一个游戏client程序猿,须要对图像处理有一定的知识. CxImage是C++实现的功能强大的.能处理多种文件格式的图像管理类.它可以简单高速的实现图像的导入.保存.显示和变换. 同一时候又具有 ...
- vue-strap 修改Modal组件
在用到vue-strap的Modal组件时,会有两个默认按钮,查看官方文档配置如下: 可以看到,ok-text和cancel-text都有一个默认值,在使用时即使不给这两个选项赋值,也会显示两个默认文 ...
- ABAP 弹出框 函数
POPUP_GET_VALUES_USER_HELP 是一个和用户交互信息的函数,用户能够填写信息,并且我们还能够依据实际的需求对弹出框进行F1 F4 以及用户的需求进行增强.具体的实现能够參考系统标 ...
- ASP.NET动态网站制作(3)--css(2)
前言:css分为四次课讲完,第一节课内容见ASP.NET动态网站制作(2)--css(1),接下来的内容会涉及到定位.浮动.盒子模型(第二次课).css的具体应用(第三次课).css3(第四次课).今 ...
- python 基础 1.5 数据类型(二)--列表
一.python 数据类型序列---列表 1.列表是可变型的数据类型.列表里边的元素是可变的,可以增加,可以删除. 2.列表(list)是处理一组有序项目的数据结构,即可以在列表中存储一个序列的项 ...
- HTML--2图片热点,网页划区,拼接,表单
图片热点: 规划出图片上的一个区域,可以做出超链接,直接点击图片区域就可以完成跳转的效果. 示例: 网页划区: 在一个网页里,规划出一个区域用来展示另一个网页的内容. 示例: 网页的拼接: 在一个网络 ...
- ICMP控制报文协议
1.引言 ICMP经常被认为是IP层的一个组成部分.它传递差错以及其他需要注意的信息.ICMP报文通常被IP层或更高层 协议(TCP或UDP)使用.一些ICMP报文把差错报文返回给用户进程.ICMP报 ...
- 基于EasyNVR二次开发实现业务需求:用户、权限、设备管理
许多接触到EasyNVR的用户.开发者都会提出关于EasyNVR设备分组和账户设备关系映射的问题,我们参考目前大部分的视频能力输出平台的做法,EasyNVR目前只做了唯一的用户/密码(类比appkey ...