css3里面的animation属性非常强大,但是自己用的比较少,最近有次面试就刚好被问到了,趁现在有时间就对animation做一个小总结。同时实现一个逐帧动画的demo作为练习


animation属性一览

因为animation属性比较多,然后在w3c上看有点蛋疼,干脆也做了一份导图,以后想查看,就一目了然了


使用animation实现逐帧动画

熟悉了animation的属性之后,得找个简单的小项目实现下,逐帧动画好有意思,先跑一个满足下自己
思路很简单,就是给元素一个雪碧图的背景,然后添加的帧动画更改background-position,关键代码:

  1. @keyframes run{
  2. from{
  3. background-position: 0 0;
  4. }
  5. to{
  6. background-position: -1540px 0 ;
  7. }
  8. }
  9. div{
  10. width:140px;
  11. height:140px;
  12. background: url(run.png) ;
  13. animation-namerun;
  14. animation-duration:1s;
  15. animation-iteration-count:infinite;
  16. }

但是跑起来后我们发现,每帧动画之间帧动画都是滑动,并不是我们要的效果,为什么呢?
原来animation默认以ease方式过渡,它会在每个关键帧之间插入补间动画,所以动画效果是连贯性的
知道原因就好办了,解决思路就是:

  1. @keyframes run{
  2. 0%, 8%{ /*动作一*/ }
  3. 9.2%, 17.2%{ /*动作二*/ }
  4. ...
  5. }

step1:动作之间停留8帧,0%设置动作一,动作一结束在8%
step2:动作之间过渡1.2帧,9.2%设置动作二,动作二结束在17.2%

完整代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>css3逐帧动画</title>
  6. <style>
  7. @keyframes run{
  8. 0%, 8%{ background-position: 0 0; }
  9. 9.2%, 17.2%{ background-position: -140px 0; }
  10. 18.4%, 26.4%{ background-position: -280px 0 ; }
  11. 27.6%, 35.6%{ background-position: -420px 0 ; }
  12. 36.8%, 44.8%{ background-position: -560px 0 ; }
  13. 46%, 54%{ background-position: -700px 0 ; }
  14. 55.2%, 63.2%{ background-position: -840px 0 ; }
  15. 64.4%, 72.4%{ background-position: -980px 0 ; }
  16. 73.6%, 81.6%{ background-position: -1120px 0 ; }
  17. 82.8%, 90.8%{ background-position: -1400px 0 ; }
  18. 92%, 100%{ background-position: -1540px 0 ; }
  19. }
  20. @-webkit-keyframes run{
  21. 0%, 8%{ background-position: 0 0; }
  22. 9.2%, 17.2%{ background-position: -140px 0; }
  23. 18.4%, 26.4%{ background-position: -280px 0 ; }
  24. 27.6%, 35.6%{ background-position: -420px 0 ; }
  25. 36.8%, 44.8%{ background-position: -560px 0 ; }
  26. 46%, 54%{ background-position: -700px 0 ; }
  27. 55.2%, 63.2%{ background-position: -840px 0 ; }
  28. 64.4%, 72.4%{ background-position: -980px 0 ; }
  29. 73.6%, 81.6%{ background-position: -1120px 0 ; }
  30. 82.8%, 90.8%{ background-position: -1400px 0 ; }
  31. 92%, 100%{ background-position: -1540px 0 ; }
  32. }
  33. div{
  34. width:140px;
  35. height:140px;
  36. background: url(http://images2015.cnblogs.com/blog/754767/201606/754767-20160601000042992-1734972084.png) ;
  37. animation:run 1s infinite;
  38. -webkit-animation:run 1s infinite;
  39. animation-fill-mode : backwards;
  40. -webkit-animation-fill-mode : backwards;
  41. }
  42. </style>
  43. </head>
  44. <body>
  45. <div></div>
  46. </body>
  47. </html>

还有另外一个实现方法,就是利用steps(),就是帧之间的阶跃动画,这个在w3c里面没有写,先贴个图

由上图可知:
steps(1,start):动画一开始就跳到 100% 直到这一帧(不是整个周期)结束
steps(1,end):保持 0% 的样式直到这一帧(不是整个周期)结束
另外也可以直接设置
animation-timing-function:step-start/step-end
step-start效果等同于steps(1,start),step-end效果等同于steps(1,end)

最终效果,因为录制的问题可能有点卡顿,有兴趣的同学可以直接复制代码去跑下:

完整代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>css3逐帧动画</title>
  6. <style>
  7. @keyframes run{
  8. 0%{
  9. background-position: 0 0;
  10. }
  11. 8.333%{
  12. background-position: -140px 0;
  13. }
  14. 16.666%{
  15. background-position: -280px 0 ;
  16. }
  17. 25.0%{
  18. background-position: -420px 0 ;
  19. }
  20. 33.333%{
  21. background-position: -560px 0 ;
  22. }
  23. 41.666%{
  24. background-position: -700px 0 ;
  25. }
  26. 50.0%{
  27. background-position: -840px 0 ;
  28. }
  29. 58.333%{
  30. background-position: -980px 0 ;
  31. }
  32. 66.666%{
  33. background-position: -1120px 0 ;
  34. }
  35. 75.0%{
  36. background-position: -1260px 0 ;
  37. }
  38. 83.333%{
  39. background-position: -1400px 0 ;
  40. }
  41. 91.666%{
  42. background-position: -1540px 0 ;
  43. }
  44. 100%{
  45. background-position: 0 0 ;
  46. }
  47. }
  48. @-webkit-keyframes run{
  49. 0%{
  50. background-position: 0 0;
  51. }
  52. 8.333%{
  53. background-position: -140px 0;
  54. }
  55. 16.666%{
  56. background-position: -280px 0 ;
  57. }
  58. 25.0%{
  59. background-position: -420px 0 ;
  60. }
  61. 33.333%{
  62. background-position: -560px 0 ;
  63. }
  64. 41.666%{
  65. background-position: -700px 0 ;
  66. }
  67. 50.0%{
  68. background-position: -840px 0 ;
  69. }
  70. 58.333%{
  71. background-position: -980px 0 ;
  72. }
  73. 66.666%{
  74. background-position: -1120px 0 ;
  75. }
  76. 75.0%{
  77. background-position: -1260px 0 ;
  78. }
  79. 83.333%{
  80. background-position: -1400px 0 ;
  81. }
  82. 91.666%{
  83. background-position: -1540px 0 ;
  84. }
  85. 100%{
  86. background-position: 0 0 ;
  87. }
  88. }
  89. div{
  90. width:140px;
  91. height:140px;
  92. background: url(http://images2015.cnblogs.com/blog/754767/201606/754767-20160601000042992-1734972084.png) ;
  93. animation:run 1s steps(1, start) infinite;
  94. -webkit-animation:run 1s steps(1, start) infinite;
  95. }
  96. </style>
  97. </head>
  98. <body>
  99. <div></div>
  100. </body>

css3 animation实现逐帧动画的更多相关文章

  1. Android动画效果之Frame Animation(逐帧动画)

    前言: 上一篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画),今天来总结下Android的另外一种动画Frame ...

  2. css3系列之animation实现逐帧动画

    上面这个两个简单的动画,是用 animation-timing-function: steps();  这个属性实现的,具体如何实现,看下面: 这上面的图片,也就是我们的素材, 有些人,可能不是很理解 ...

  3. CSS3 animation属性中的steps实现GIF动图(逐帧动画)

    相信 animation 大家都用过很多,知道是 CSS3做动画用的.而我自己就只会在 X/Y轴 上做位移旋转,使用 animation-timing-function 规定动画的速度曲线,常用到的 ...

  4. css3 实现逐帧动画

    css3 实现逐帧动画 实现逐帧动画需要使用到的是Animation动画,该CSS3的Animation有八个属性:分别是如下:1: animation-name2: animation-durati ...

  5. animation中的steps()逐帧动画

    在我们平时做宽高确定,需要背景图片切换的效果时,我如果用的是一张大的png图片.而且恰好是所有小图都是从左向右排列的,那么 我们只需测量出某一个小图距左侧有多少像素(x),然后我们banckgroun ...

  6. css3逐帧动画

    写css3动画的时候,我们经常用到animation来实现,默认情况下,animation是属于连贯性的ease动画.我们熟悉的animation动画有ease.ease-in.ease-out.li ...

  7. Android笔记(六十三) android中的动画——逐帧动画( frame-by-frame animation)

    就好像演电影一样,播放实现准备好的图片,来实现动画效果. 逐帧动画需要用到AnimationDrawable类,该类主要用于创建一个逐帧动画,然后我们把这个动画设置为view的背景即可. androi ...

  8. 利用css3-animation来制作逐帧动画

    前言 趁着还没有元旦之前先码一篇文章,不然到时候估计又被各种虐了,所以趁现在还有力气先来一篇.今天来聊聊css3中的动画属性animation,对这个属性懵懂是在很早的时候有前辈用这个 animati ...

  9. 使用node.js开发一个生成逐帧动画小工具

    在实际工作中我们已经下下来不下于一万个npm包了,像我们熟悉的 vue-cli,react-native-cli 等,只需要输入简单的命令 vue init webpack project,即可快速帮 ...

随机推荐

  1. C#将对象转换成JSON字符串,Newtonsoft.Json (JSON.NET)

    官方API说明文档 http://www.newtonsoft.com/json/help/html/N_Newtonsoft_Json.htm http://www.newtonsoft.com/ ...

  2. 高效使用Bitmaps(三) 神奇的Cache

    转载:http://my.oschina.net/rengwuxian/blog/184650 应用的场景 假设你开发了一个聊天程序,它的好友列表中显示从网络获取的好友头像.可是如果用户发现每次进入好 ...

  3. yii2 i18n学习

    举例说明常见的翻译:Yii::t('app','Login'):追踪源码:BaseYii.php 文件 ,Yii::t($category, $message, $params = [], $lang ...

  4. 用MyGeneration模板生成NHibernate映射文件和关系

    用我的MyGeneration模板生成NHibernate映射文件和关系(one-to-one,one-to-many,many-to-many) MyGeneration的几个NHibernate模 ...

  5. lunix机器的jdk安装

    本来不想写这篇博客的,写在这儿只是作为自己的笔记,jdk安装了千万编,但是踩过的坑老是不记,看别人的博客又各种不爽,所有索性自己写一个得了.老规矩,无图. Oracle版本的jdk下载地址:http: ...

  6. java中调用dll文件的两种方法

    一中是用JNA方法,另外是用JNative方法,两种都是转载来的, JNA地址:http://blog.csdn.net/shendl/article/details/3589676   JNativ ...

  7. paxos 实现

    原文地址:http://rdc.taobao.com/blog/cs/?p=162 本文主要介绍zookeeper中zookeeper Server leader的选举,zookeeper在选举lea ...

  8. MSSQL 如何实现 MySQL 的 limit 查询方式 (转)

    不知为何,MSSQL 中没有 limit 这个极为重要的查询方式,熟悉 MySQL 的朋友都知道,MySQL 的 limit 对于实现分页和一些限制结果集的应用中非常方便.没有不要紧,我们可以用其他方 ...

  9. HubbleDotNet 学习之路

    1.创建后台任务实现自动同步更新表数据.打开工具后点击“management”选项卡,选择“task scheduler management”,在弹出的窗口中点击右侧的"add" ...

  10. ShowcaseView-master

      ShowcaseView.rar