`
xiaoluode
  • 浏览: 14572 次
  • 来自: 深圳
社区版块
存档分类
最新评论

深入理解CSS3 Animation 帧动画

 
阅读更多

我们知道CSS3的Animation有八个属性

  1. animation-name
  2. animation-duration
  3. animation-delay
  4. animation-iteration-count
  5. animation-direction
  6. animation-play-state
  7. animation-fill-mode
  8. animation-timing-function

其中1-7大多都有介绍,但是animation-timing-function是控制时间的属性

在取值中除了常用到的 三次贝塞尔曲线 以外,还有个让人比较困惑的 steps() 函数

animation默认以ease方式过渡,它会在每个关键帧之间插入补间动画,所以动画效果是连贯性的

除了ease,linear、cubic-bezier之类的过渡函数都会为其插入补间。但有些效果不需要补间,只需要关键帧之间的跳跃,这时应该使用steps过渡方式

 

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


 以上w3school网站上给的使用方法,但是漏掉一个很重要的 steps

简单的来说,我们一直使用animation基本都是实现线性渐变的动画

  • 位置在固定的时间从起点到终点
  • 尺寸在固定的时间线性变化
  • 颜色的线性改变等等

看效果 线性动画

截取CSS如下

.test1 {
    width: 90px;
    height: 60px;
    -webkit-animation-name: skyset;
    -webkit-animation-duration: 2000ms;
    -webkit-animation-iteration-count: infinite; /*无限循环*/
    -webkit-animation-timing-function: linear;
}
@-webkit-keyframes skyset {
    0% { background: red;}
    50%{ background: blue}
    100% {background: yellow;}
}

 timing-function:linear 定义的是一个匀速变化的动画,就是在2秒内,从红色过度到蓝色到黄色,是一个很线性的颜色变化

如果要实现帧动画效果而不是线性的变化就需要引入step这个值了,换句话就是没有过渡的效果,而是一帧帧的变化

同样可以看测试 帧动画

 

理解steps

steps 函数指定了一个阶跃函数

第一个参数指定了时间函数中的间隔数量(必须是正整数)

第二个参数可选,接受 start 和 end 两个值,指定在每个间隔的起点或是终点发生阶跃变化,默认为 end。

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

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

看看W3C的规范 transition-timing-function

 

steps第一个参数的错误的理解:

steps(5,start)

steps() 第一个参数 number 为指定的间隔数,即把动画分为 n 步阶段性展示,估计大多数人理解就是keyframes写的变化次数

例如:

@-webkit-keyframes circle {
        0% {}
        25%{}
        50%{}
        75%{}
        100%{}
 }

 我之前也一直认为steps(5,start)中的5 就是指的keyframes中的0% 25% 50% 75% 100% 分成5个间隔等分

为什么会出现这种理解错误,我们看一个例子

keyframes的关键帧是只有2个规则的时候,假如我们有一张400px长度的雪碧图

@-webkit-keyframes circle {
        0% {background-position-x: 0;}
        100%{background-position-x: -400px;}
 }

 此刻设置steps(5,start)那么会发现5张图会出现帧动画的效果,因为steps中的5把 0% – 100%的规则,内部分成5个等分

实际内部会执行这样一个关键帧效果

@-webkit-keyframes circle {
        0% {background-position-x: 0;}
        25% {background-position-x: -100px;}
        50% {background-position-x:-200px;}
        75%{background-position-x: -300px;}
        100%{background-position-x: -400px;}
 }

 将这个规则稍微修改下,加入一个50%的状态

@-webkit-keyframes circle {
        0% {background-position-x: 0;}
        50% {background-position-x: -200px;}
        100%{background-position-x: -400px;}
 }

 那么同样用steps(5,start)效果就会乱套

此刻你会很迷惑,所以关键要理解第一个参数的针对点,首先引入一个核心点:

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

那么第一个参数很好理解了,steps的设置都是针对两个关键帧之间的,而非是整个keyframes,所以第一个参数对 - 次数对应了每次steps的变化

换句话说也是 0-25 之间变化5次,  25-50之间 变化5次 ,50-75 之间变化5次,以此类推

 

第二个参数可选,接受 start 和 end 两个值,指定在每个间隔的起点或是终点发生阶跃变化,默认为 end

通过案例看下 step-startstep-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

引用w3c的一张step的工作机制图


 总结:

steps函数,它可以传入两个参数,第一个是一个大于0的整数,他是将间隔动画等分成指定数目的小间隔动画,然后根据第二个参数来决定显示效果。

第二个参数设置后其实和step-start,step-end同义,在分成的小间隔动画中判断显示效果。可以看出:steps(1, start) 等于step-start,steps(1,end)等于step-end

最核心的一点就是:timing-function 作用于每两个关键帧之间,而不是整个动画

http://designmodo.com/steps-css-animations/

 

 

转自:http://www.cnblogs.com/aaronjs/p/4642015.html

 

  • 大小: 65 KB
  • 大小: 42 KB
分享到:
评论

相关推荐

    css3 animation酷炫的文字动画特效

    首先,我们需要了解CSS3 Animation的基础。这包括定义关键帧(@keyframes)规则,设置动画属性(如duration、delay、iteration-count和direction),以及将动画应用到HTML元素上。例如,创建一个简单的文字淡入淡出...

    Css3 animation---介绍如何实现css的动画

    这篇教程将深入探讨CSS3 Animation的原理、语法以及应用场景,帮助你更好地掌握这一强大技术。 ### 一、基本概念 CSS3 Animation是通过`@keyframes`规则定义动画过程,并结合`animation`属性来应用动画。`@...

    CSS3 Animation文字动画特效.zip

    CSS3 Animation提供了关键帧(@keyframes)规则,使得我们可以定义动画从开始到结束的状态,并控制动画的速度曲线、延迟时间等参数,以创造出各种各样的动态效果。 这个压缩包内包含7款不同的文字动画特效,每一种...

    css3弹力球动画animation属性制作3D弹力球弹跳动画效果

    接下来,我们将深入探讨如何利用CSS3的`animation`属性来制作这样一个3D弹力球动画。 首先,我们需要理解`animation`属性的基本结构。它是一个复合属性,包含了多个相关的子属性,如`animation-name`、`animation-...

    纯css3 animation动画属性点击loading加载动画提示框效果代码.zip

    在IT行业中,CSS3是 Cascading Style Sheets 的第三版本,它极大地扩展了样式表语言的能力,...通过研究和理解这些代码,开发者可以更深入地了解如何利用CSS3的动画功能为网站或应用程序增添动态效果,提高用户体验。

    CSS3-animation(动画)_Animation_css_

    **CSS3 动画简介** CSS3(Cascading Style Sheets 第三代)是网页样式表语言,它极大地扩展了对网页元素的...通过深入理解@keyframes规则和animation属性,我们可以为网站增添更多互动性和视觉吸引力,提升用户体验。

    纯css3 animation动画属性点击loading加载动画

    综上所述,纯CSS3的animation属性结合精心设计的关键帧,可以创造出各种各样的加载动画效果,为用户提供更优的交互体验。通过熟练掌握这些技巧,开发者能够为网站添加生动有趣的动态元素,同时保持高效的性能。在...

    CSS3 animation属性制作逼真的大风车旋转动画

    CSS3的Animation属性是现代网页设计中的一个重要工具,它使得开发者能够创建复杂的动态效果,如平滑的过渡、动画序列等,而无需依赖JavaScript或者其他外部库。在本案例中,我们将深入探讨如何使用CSS3的animation...

    CSS3 animation超酷网页Loading加载进度条动画效果

    首先,我们需要了解CSS3的animation属性。CSS3的animation属性是一组属性的简写形式,包括`animation-name`、`animation-duration`、`animation-timing-function`、`animation-delay`、`animation-iteration-count`...

    html5+css3 animation制作各种页面过渡切换动画效果

    例如,`animation-name`用于指定动画的名称,这个名称对应于CSS中定义的关键帧动画;`animation-duration`定义动画的总时长;`animation-timing-function`可以设置动画的速度曲线,如linear(匀速)、ease(默认,慢...

    Pro CSS3 Animation

    整体来看,《Pro CSS3 Animation》是一本非常适合那些想要深入了解和应用CSS3动画的设计师和开发者的书。书中不仅仅是理论知识的堆砌,更重要的是通过实例和技巧,帮助读者在实际工作中更好地运用CSS3动画。对于那些...

    CSSAnimation101从零开始介绍CSS动画开源电子书

    在"CSSAnimation101从零开始介绍CSS动画开源电子书"中,我们将深入探讨这个主题,了解如何使用CSS创建引人入胜的动画效果。 **一、CSS动画基础** 1. **关键帧(Keyframes)**:CSS动画的核心是关键帧,它定义了...

    纯css3 animation绘制轮船和飞机动画特效

    首先,我们要了解CSS3动画的基础概念。`animation`属性是由多个子属性组成的,包括`animation-name`、`animation-duration`、`animation-timing-function`、`animation-delay`、`animation-iteration-count`、`...

    CSS3动画的集合

    **CSS3 动画概述** ...通过深入理解`@keyframes`规则和动画属性,开发者可以轻松地构建出流畅、富有表现力的网页效果。这个名为"CSS3 animator"的资源集合,无疑是一个学习和探索CSS3动画的宝贵资料。

    css3 animation动画制作点击波特效.zip

    首先,我们需要了解CSS3 Animation的基础知识。CSS3 Animation允许我们在不同时间点定义元素的不同样式,通过关键帧(keyframes)来创建动画。我们可以使用`@keyframes`规则来定义动画的起始和结束状态,以及在动画...

    30种css3 animation页面加载等待动画特效

    为了实现这些效果,开发者需要对CSS3的`transform`、`transition`、`opacity`、`box-shadow`等属性有深入理解,并灵活运用它们。此外,还要注意性能优化,避免过度渲染导致的性能问题。 在压缩包文件`texiao4424_...

    CSS3 Sprite僵尸行走动画特效.zip

    通过解压并查看这些文件,你可以更深入地理解如何实际应用这些CSS3技巧来创建僵尸行走动画。 总之,CSS3 Sprite僵尸行走动画特效展示了CSS3的强大能力,不仅可以优化网页性能,还能创造出丰富的视觉体验。学习并...

    纯css3 animation属性圆形动态时钟特效

    首先,让我们深入了解`animation`属性。它是一个简写属性,用于合并以下多个与动画相关的CSS属性: 1. `animation-name`: 定义动画的名称,这是在一个@keyframes规则中定义的动画序列。 2. `animation-duration`: ...

    css3 animation绘制彩色光点背景动画.zip

    在本文中,我们将深入探讨如何使用CSS3 Animation技术来创建一个引人注目的彩色光点背景动画。这个特效是通过JavaScript配合CSS3实现的,旨在为网页增添动态视觉效果,吸引用户注意力,提升用户体验。 首先,我们要...

    css3 animation绘制彩色光点背景动画

    首先,让我们了解CSS3 Animation的基础。`@keyframes`规则是定义动画的关键,它定义了动画从开始到结束的各个阶段元素应该具有的样式。例如,创建一个名为`dots-animation`的动画: ```css @keyframes dots-...

Global site tag (gtag.js) - Google Analytics