2019独角兽企业重金招聘Python工程师标准>>>

以WebKit为核心的浏览器,例如Safari和Chrome,对HTML5有着很好的支持,在移动平台中这两个浏览器对应的就是iOS和Android。最近在开发一个移动平台的web app,那么就有机会利用CSS3去实现一些很酷的效果,这些效果原来更多的是利用图片来实现。最近的一个改进就是利用css3制作旋转加载动画。以下将分别介绍几种实现的方案。

方案1,图片辅助

传统做法是直接用动态的GIF图片,这个方案是用PNG图片加上背景颜色来模拟静止的加载图片,然后利用css中的animation处理图片的旋转。相比传统方案,这个方案的好处是可以直接通过修改CSS来改变背景色,可以修改大小和旋转速度。如下是具体的CSS代码:

 
  1. @-webkit-keyframes rotate {
  2. from {-webkit-transform:rotate(0deg);}
  3. to {-webkit-transform:rotate(360deg);}
  4. }
  5. p#spinner {
  6. height: 30px;
  7. width: 30px;
  8. overflow: hidden;
  9. background: #000;
  10. -webkit-mask-image: url("data:image/png[...]");
  11. -webkit-mask-size: 30px 30px;
  12. -webkit-animation-name: rotate;
  13. -webkit-animation-duration: 1.5s;
  14. -webkit-animation-iteration-count: infinite;
  15. -webkit-animation-timing-function: linear;
  16. }

具体效果查看这里:Demo1

这个方案,只有safari可以很好地支持。chrome下支持不是很好,所以这是一个不太成熟的方案。

方案2, 纯CSS实现

方案的思路是,首先用css渲染12个静态的bar,每个bar间隔30度的角度,给每个bar添加背景变淡的动画,但是相邻bar的动画效果延迟1/12秒,来保证12个bar是按顺序变亮然后变暗。从而模拟出旋转的效果。

这个旋转效果是伪旋转,所有的bar都没有真正做到旋转。

 
  1. @-webkit-keyframes fade {
  2. from {opacity: 1;}
  3. to {opacity: 0.25;}
  4. }
  5. div.spinner {
  6. position: relative;
  7. width: 30px;
  8. height: 30px;
  9. display: inline-block;
  10. }
  11. div.spinner div {
  12. width: 20%;
  13. height: 40%;
  14. background: #000;
  15. position: absolute;
  16. left: 100%;
  17. top: 100%;
  18. opacity: 0;
  19. -webkit-animation: fade 1s linear infinite;
  20. -webkit-border-radius: 30px;
  21. }
  22. div.spinner div.bar1 {
  23. -webkit-transform:rotate(0deg) translate(0, -142%);
  24. -webkit-animation-delay: 0s;
  25. }
  26. [......]
  27. div.spinner div.bar12 {
  28. -webkit-transform:rotate(330deg) translate(0, -142%);
  29. -webkit-animation-delay: -0.0833s;
  30. }

具体效果查看这里:Demo2

safari和chrome都能很好地渲染这个效果,并且也很容易定义实际大小,因为所有的bar的高度,宽度有是用百分比来定义的。缺点也很明显,需要定义12个bar,并且每个bar都要定义独立的css,相对来说html和css的代码量有点多。

方案3,这个方案类似sencha touch中实现的效果

方案的基本思想是:首先利用html和css呈现4个bar,再通过css的伪元素: before和:after定义每个bar的前后内容,这样使得由原始的4个bar产生12个bar的效果,其次通过css设置让12个bar的透明度逐渐递减,最后应用css3中旋转动画达到实际loading的效果。

 
  1. .x-loading-spinner {
  2. font-size: 250%;
  3. height: 1em;
  4. width: 1em;
  5. position: relative;
  6. -webkit-transform-origin: 0.5em 0.5em;
  7. }
  8. .x-loading-spinner > span, .x-loading-spinner > span:before, .x-loading-spinner > span:after {
  9. display: block;
  10. position: absolute;
  11. width: 0.1em;
  12. height: 0.25em;
  13. top: 0;
  14. -webkit-transform-origin: 0.05em 0.5em;
  15. -webkit-border-radius: 0.05em;
  16. border-radius: 0.05em;
  17. content: " ";
  18. }
  19. .x-loading-spinner > span.x-loading-top {
  20. background-color: rgba(170, 170, 170, 0.99);
  21. }
  22. .x-loading-spinner > span.x-loading-top::after {
  23. background-color: rgba(170, 170, 170, 0.9);
  24. }
  25. .x-loading-spinner > span.x-loading-left::before {
  26. background-color: rgba(170, 170, 170, 0.8);
  27. }
  28. .x-loading-spinner > span.x-loading-left {
  29. background-color: rgba(170, 170, 170, 0.7);
  30. }
  31. .x-loading-spinner > span.x-loading-left::after {
  32. background-color: rgba(170, 170, 170, 0.6);
  33. }
  34. .x-loading-spinner > span.x-loading-bottom::before {
  35. background-color: rgba(170, 170, 170, 0.5);
  36. }
  37. .x-loading-spinner > span.x-loading-bottom {
  38. background-color: rgba(170, 170, 170, 0.4);
  39. }
  40. .x-loading-spinner > span.x-loading-bottom::after {
  41. background-color: rgba(170, 170, 170, 0.35);
  42. }
  43. .x-loading-spinner > span.x-loading-right::before {
  44. background-color: rgba(170, 170, 170, 0.3);
  45. }
  46. .x-loading-spinner > span.x-loading-right {
  47. background-color: rgba(170, 170, 170, 0.25);
  48. }
  49. .x-loading-spinner > span.x-loading-right::after {
  50. background-color: rgba(170, 170, 170, 0.2);
  51. }
  52. .x-loading-spinner > span.x-loading-top::before {
  53. background-color: rgba(170, 170, 170, 0.15);
  54. }
  55. .x-loading-spinner > span {
  56. left: 50%;
  57. margin-left: -0.05em;
  58. }
  59. .x-loading-spinner > span.x-loading-top {
  60. -webkit-transform: rotate(0deg);
  61. -moz-transform: rotate(0deg);
  62. }
  63. .x-loading-spinner > span.x-loading-right {
  64. -webkit-transform: rotate(90deg);
  65. -moz-transform: rotate(90deg);
  66. }
  67. .x-loading-spinner > span.x-loading-bottom {
  68. -webkit-transform: rotate(180deg);
  69. -moz-transform: rotate(180deg);
  70. }
  71. .x-loading-spinner > span.x-loading-left {
  72. -webkit-transform: rotate(270deg);
  73. -moz-transform: rotate(270deg);
  74. }
  75. .x-loading-spinner > span::before {
  76. -webkit-transform: rotate(30deg);
  77. -moz-transform: rotate(30deg);
  78. }
  79. .x-loading-spinner > span::after {
  80. -webkit-transform: rotate(-30deg);
  81. -moz-transform: rotate(-30deg);
  82. }
  83. .x-loading-spinner {
  84. -webkit-animation-name: x-loading-spinner-rotate;
  85. -webkit-animation-duration: 0.5s;
  86. -webkit-animation-iteration-count: infinite;
  87. -webkit-animation-timing-function: linear;
  88. }
  89. @-webkit-keyframes x-loading-spinner-rotate {
  90. from {
  91. -webkit-transform: rotate(30deg);
  92. }
  93. to {
  94. -webkit-transform: rotate(330deg);
  95. }
  96. }

具体效果查看这里:Demo3

这个方案是3个方案中应用css技术最彻底的一个,html的代码最少,并且也真正做到了旋转效果。缺点是不易扩展,chrome浏览器支持不是很理想。

综上分析,方案1浏览器支持不好,但是实现简单,方案2的html代码太多,但扩展好,浏览器支持不错,方案3的扩展性不好,浏览器支持也不好,但是较好地利用了css的特性。

如果开发桌面web系统,推荐方案2,如果是mobile系统,则方案2和方案3各有优势。

登录乐搏学院官网http://www.learnbo.com/

或关注我们的官方微博微信,还有更多惊喜哦~

转载于:https://my.oschina.net/learnbo/blog/818371

用css3制作旋转加载动画的几种方法相关推荐

  1. php带旋转动画刷新页面,CSS_CSS实现弹簧效果的旋转加载动画,先看看效果,像是弹簧在伸缩 - phpStudy...

    CSS实现弹簧效果的旋转加载动画 先看看效果,像是弹簧在伸缩: 具体代码: 此处用到CSS3的transform属性. CSS3的变形(transform)属性让元素在一个坐标系统中变形.这个属性包含 ...

  2. html5 黑色圆圈,html5 css3圆形百分比加载动画特效

    特效描述:html5 css3 圆形百分比 加载动画特效.html5 css3 loading加载动画,圆形百分比进度条加载动画,加载完成显示健康度检测得分情况. 代码结构 1. 引入JS 2. HT ...

  3. 超酷的 CSS3 loading 预加载动画特效

    给大家介绍一款超酷CSS3 loading预加载动画特效. 该loading特效共有4种不同的效果,分别通过不同的CSS3 keyframes帧动画来完成. HTML结构 4种loading预加载动画 ...

  4. wincc做皮带动画_WINCC中制作管道流体流动动画的一种方法

    WINCC 中制作管道流体流动动画的一种方法 采用自定义对象的方法制作,不需要使用全局变量及外部量. 以制作横向向右流动流动块为例: 1 .画两个高度相等的矩形,分为是 rec1 和 rec2 , r ...

  5. WPF编程,通过KeyFrame 类型制作控件线性动画的一种方法。

    WPF编程,通过KeyFrame 类型制作控件线性动画的一种方法. 原文: WPF编程,通过KeyFrame 类型制作控件线性动画的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https ...

  6. (一)JQuery动态加载js的三种方法

    Jquery动态加载js的三种方法如下: 第一种: $.getscript("test.js"); 例如: <script type="text/javascrip ...

  7. html旋转的等到的圆圈,CSS3 Loading 旋转圆盘加载动画

    前面介绍过多个css3 loading加载动画的实例,今天继续介绍另一个实例,这个实例用css3实现旋转圆盘的预加载动画. css代码#preloader{ position:relative; wi ...

  8. css旋转动画定义中心,CSS实现弹簧效果的旋转加载动画

    先看看效果,像是弹簧在伸缩: 具体代码: 此处用到CSS3的transform属性. CSS3的变形(transform)属性让元素在一个坐标系统中变形.这个属性包含一系列变形函数,可以移动.旋转和缩 ...

  9. android 载入svg动画,实例讲解使用SVG制作loading加载动画的方法

    今天和大家分享一个以SVG图像为主的loading加载动画,现在移动端网页使用比较多,若还用GIF做loading图片的话,可能会影响图像的质量,所以使用SVG是一个不错的方式. 这次展示的代码由 A ...

最新文章

  1. QTP的那些事--不能识别web上的测试对象
  2. 计算机视觉之人脸检测相关Paper资源汇总
  3. mysql企业版 5.6.18 安装_Mysql 5.6.18解压包版在Rhel6.7上安装
  4. 远程过程调用失败_Dubbo 本地调用
  5. 手机通讯录备份代码实现三
  6. SpringMVC@RequestMapping请求方法限定与请求参数限定
  7. 万岳在线教育系统源码v1.1.4 支持录播回看/网课购买/学习测试
  8. python12306抢票_Python实例--12306的抢票功能
  9. word 宏相关代码集合
  10. win10自带ie和Edge浏览器无法上网解决方法 第三方浏览器和QQ可以使用
  11. 设计师都在看的全球设计网站,你居然还不知道!
  12. 计算机屏幕变红色,win7系统电脑屏幕变成红色的设置技巧
  13. ★人眼到底等于多少像素 ?
  14. eclpse配置tomact
  15. matlab模拟神经模糊自适应控制器
  16. 单片机 P0口、P1口 寄存器和引脚的不同
  17. paddlepaddle模型的保存和加载
  18. 刚刚,谷歌翻车了。。。
  19. 在线未注册域名批量查询-域名注册批量查询
  20. linux内存重映射的概念及对内核虚拟地址的重映射方法分析

热门文章

  1. Babelfish (STL)
  2. Linux下运行jar程序
  3. VC++多线程编程[转]
  4. 【Android游戏开发之八】游戏中添加音频-详解MediaPlayer与SoundPool的利弊以及各个在游戏中的用途!...
  5. concurrent: ThreadPoolExecutor 用法
  6. java.lang.OutOfMemoryError 解决方式
  7. oracle 数据 导出 excel 自动分多个文件,从oracle数据库中导出大量数据到excel中为什么自动分成了好几个excel文件《excel表格新手入门》...
  8. CompletableFuture多任务组合
  9. ribbon是什么?
  10. 用zookeeper来实现分布式锁