使用CSS3制作饼状旋转载入效果的实例

  今天,要实现一个长任务等待提示效果。

  然后设计师就把做好的gif效果图给我,就是下面这个:


  按照大众做法,我应该是把图片直接按图索骥,调调布局,然后早早回家抱老婆。

  但是,我这个人,天生不安分守己。想到是用在客户端,客户端又是用的webkit内核,于是,立马决定使用CSS3来折腾一番。

  外面的光环很好实现,360度转转转就OK. 但是,中间那个鸡蛋转转转的可不是好啃的骨头啊。人家师傅饼前一分钟,饼下十年功啊。

  我生小辈想要习得这转饼的精髓,可得要好生琢磨一番啊!

  如果您手头的是IE10+这类支持animation的现代浏览器,您可以狠狠地点击这里:CSS3饼状图loading旋转动画demo


  截图是死的,demo是活的。建议点上面的地址去仔细对比CSS3实现和gif动画效果。

  不难发现,这个gif尺寸又大,效果也不流畅,还烧性能。相比之下,立马被CSS3实现甩出了2条南京路。

  CSS3效果更佳、性能更高、资源占用更少大家都认同了。关键是,这个大饼它是怎么转起来的?

  略复杂。

  蛋饼旋转技能传授

  师父领进门修行在个人,听不懂我也没办法啦~~

  我们肉眼看上去是一个鸡蛋被摊在了整个饼上,实际上,这只是个障眼法。

  实际摊的鸡蛋,只有半个饼那么大。还有半个饼位置是长得像鸡蛋的假鸡蛋和长得像大饼的假大饼。显然这句话你听不懂,因为我自己都没听懂,哈哈~~所谓一图胜千言,示意图走起~

  下图示意的就是鸡蛋饼上的鸡蛋从100%变小成0的过程。

  1. 这是没有干扰的蛋饼,你看到的是半个假饼和半个假蛋。


  2. 当我们煎饼动画转起的一瞬间,我们让假的饼子隐藏回家打酱油去。于是,从上面看,我们看到的就是满满一层的鸡蛋。


  3. 真鸡蛋转起,你会发现,半个真鸡蛋,由于逆时针旋转,露出了点空(左侧上部)。


  demo对应效果类似(浅色看成鸡蛋):


  4. 当真鸡蛋旋转了180度(半圈)的时候,真假鸡蛋正好重合在了一起,于是就是看到的就是蛋饼上半面鸡蛋。


  demo对应效果类似:


  demo对应效果类似:


  6. 一直旋转到360度,其完全被假的饼子遮盖,一点鸡蛋都看不到了。完成了从全部都0的动画过程。这就是蛋饼转转转的基本原理。

 


  CSS3表示

  可见,要实现我们想要的蛋饼效果,我们需要这些东西:

  圆形的蛋饼子 – 对应下面类名为inner元素

  旋转的半面真鸡蛋 – 对应下面类名为spiner的元素

  不动的半面蛋饼子,前半程隐藏,后半程出现 – 对应下面类名为masker的元素

 

  不动的半面假鸡蛋,前半程出现,后半程隐藏 – 对应下面类名为filler的元素

         CSS Code复制内容到剪贴板

  1. <div class="inner">
  2. <div class="spiner"></div>
  3. <div class="filler"></div>
  4. <div class="masker"></div>
  5. </div>

  inner主要实现圆以及背景色;

  spiner主要实现半圆的360度逆时针旋转,其背景色有别于父元素的背景色;

  filler半圆,定位在右侧,与旋转元素同样背景色;后面的180度隐藏;

  masker半圆,定位在左侧,与大背景色色值相同;旋转前180度隐藏,之后显示遮盖;

  其中,360度旋转CSS代码如下:

 

  CSS Code复制内容到剪贴板

  1. @keyframes spin {
  2. 0% { transform: rotate(360deg); }
  3. 100% { transform: rotate(0deg); }
  4. }

  因为是逆时针,所以是从360deg到0deg.

  前半程出现,后半程隐藏,可以借助animation step相关的timing function实现,代码如下:

 

  CSS Code复制内容到剪贴板

  1. @keyframes second-half-hide {
  2. 0% { opacity: 1; }
  3. 50%, 100% { opacity: 0; }
  4. }

        后半程显示则是:

         CSS Code复制内容到剪贴板

  1. @keyframes second-half-show {
  2. 0% { opacity: 0; }
  3. 50%, 100% { opacity: 1; }
  4. }

         于是,我们只要加个动画时间,以及无限执行就OK啦~~

        CSS Code复制内容到剪贴板

  1. .spiner { transform-origin: rightright center; animation: spin .8s infinite linear; }
  2. .filler { animation: second-half-hide .8s steps(1, end) infinite; }
  3. .masker { animation: second-half-show .8s steps(1, end) infinite; }

  其他细节都是定位什么的,很基础的知识,就不啰嗦啦~~

  饼其实还没有做好

  啊,捣鼓了这么久还没有结束啊?

  没错。仔细查看gif动画,你会发现,蛋饼它是从全盘都0再到整个360度覆盖的。

  而,上午捣鼓的动画只是从360度无死角覆盖到0覆盖。一旦覆盖结束,就又要走360度开始,不连贯,怎么破?

  我是这么处理的:

  再覆盖一个蛋饼从0度到360度展示的动画。与一直捣鼓的动画前后半程分别展示就可以了。

  于是,最终有如下HTML:

 

  XML/HTML Code复制内容到剪贴板

  1. <div class="inner">
  2. <div class="spiner"></div>
  3. <div class="filler"></div>
  4. <div class="masker"></div>
  5. </div>
  6. <div class="inner2">
  7. <div class="spiner"></div>
  8. <div class="filler"></div>
  9. <div class="masker"></div>
  10. </div>

        inner和inner2也使用的前后半程隐藏的动画,动画时间正好是一个周期的2倍。

        CSS Code复制内容到剪贴板

  1. .inner { opacity: 1; animation: second-half-hide 1.6s steps(1, end) infinite; }
  2. .inner2 { opacity: 0; animation: second-half-show 1.6s steps(1, end) infinite; }

          于是,就有了完美的做蛋饼效果了。

时间: 2024-08-07 12:29:52

使用CSS3制作饼状旋转载入效果的实例的相关文章

如何在C#的WinForm中制作饼状图和柱状图

饼状图|柱状图 当我们的软件需要各种饼状图和柱状图来表示数据时,我们或许会想到用Offices中的图形控件或是第三方控件,但现在的第三方控件大都需要注册,有些免费的控件会有开发商的标记等.而对于使用Offices的图形控件来说,并不能在程序中得于很好控制,其使用的简易程度也较低,所以在这我给出在C#中使用GDI+实现饼状图和柱状图跟数据库联接显示数据的方法.  using System;  using System.IO;//用于文件存取  using System.Data;//用于数据访问 

JS+CSS3制作炫酷的弹窗效果_javascript技巧

昨天在家看电视时,退出的时候发现了一个弹窗效果,整个背景模糊,觉得这样的效果好炫,要比纯色加透明度高大上好多,连续试了几个界面,最终确定效果由css实现的,于是今天一大早来到公司便赶紧搜索了一下,虽然兼容性奇差,但是一个css属性就可以搞定.瞬间感觉自己知道的真是太少了~~        首先回忆一下弹窗的实现,一般我们分为两层,弹出窗口层(popus)和遮罩层(mask),通常情况下我习惯就这两元素全部设成fixed定位,具体和absolute区别一试便知.对于mask层自不用多少,我们如下给

饼状分布图-C#制作饼状图,多条件选择查询

问题描述 C#制作饼状图,多条件选择查询 我现在有这样一个需求,就是在一个专卖店销售自行车,开单时有很多的客户资料,如性别,年龄段,职业等等,我要做的是根据这些客户条件查询销售情况,并用饼状图显示出来,条件用单选框,然后点击按钮进行查询显示,谁能告诉我做吗?谢谢,本人是一个经验不足的女程序媛

使用rgraph在JavaScript中制作饼状图

问题描述 使用rgraph在JavaScript中制作饼状图 使用rgraph在JavaScript中制作饼状图,数据和结构都正确,但是就是显示不出来饼状图 解决方案 这个没用过,一直用的d3和Echarts,最简单的办法就是找个官方的demo,把数据给改掉,别改其他东西先试试.

css3制作的精美链接菜单效果

一组精美的CCS3代码制作的文字链接菜单效果,链接色彩变换样式非常漂亮,值得收藏参考! [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

Flash AS3制作交互式3D旋转动画效果

  效果演示: 使图标具有交互性: 当鼠标单击某个图标时使之旋转,并让图标显示在屏幕的最前面. //定义旋转的最终角度 var endAngle:Number = 90; //保存已经旋转的角度 var tempAngle:Number = 0; //保存旋转的状态 var isRotating:Boolean = true; //注册图标的单击事件 mc.addEventListener(MouseEvent.MOUSE_DOWN,startRotation); //定义侦听器函数 funct

PowerPoint中制作超炫旋转文字效果

  步骤一: 打开PowerPoint新建一个演示文稿 步骤二: 插入艺术字,内容输入自己想要的文字"第九软件网",如图 点击插入的艺术字,在菜单栏选择"艺术字形状"这里我们选择细环形,然后,调整文字的间距,如图 步骤三: 右键选择"设置对象格式",设置其颜色,如图 步骤四: 执行[插入--形状--十六角星],然后设置对象格式,设置颜色,如图 步骤五: 分别给文字和十六角星形状添加"陀螺旋"动画效果,其中十六角星动画效果设置如

CSS3制作loading加载动画效果代码

  在我们这次的新设计教程中,我将向您展示如何创建纯CSS3的loading加载动画组件(没有任何图像).我认为它可以为你减少项目的代码量和额外的图像对你网站的负载.我准备了三种不同风格的加载组件.现在,让我们看看我做的. css3-loading Step 1. HTML 你可以在这里看到的三个元素–放置"加载"元素的div.  代码如下   <div class="main_body">     <div class="element

PS制作很酷的旋转字效果的GIF动画教程

我这里先说出教程的主要思路: 1.首先你要明白如何在路径上输入文字,让文字随路径变化:http://www.86ps.com/Article/PSJC/4196.html 2.这个就是两个圈圈的排列位置,这个位置上需要用到自由变换,你要对这个命令熟悉(包括透视) 3.接下来就是耐心大考验,我之前做了一个 ,因为偷懒做出来卡卡的 不顺畅,重新做了一个 先看效果图,效果图中其他的地方是我用笔刷刷上去的,不然感觉画面空空的 这一楼用来说明一下各个步骤 首先新建黑色背景 用椭圆工具(图一)弄个路径 在路