简单的CSS3 Loading动画

  最终效果如图一,gif图片稍微有点卡顿,事实上代码在浏览器里执行得很流畅。这里面用到的css3技术非常简单,分别是border-radius、伪元素、css3关键帧以及animation动画。

  首先整理一下大概的思路:整个圆分为AB两部分,左右都是半圆,上面盖了一个背景色为白色的小圆,如右图,简单布局如下:

  

<style>
  .loading{margin:100px auto; width: 8em; height: 8em; position: relative;}
  .loading .progress{position: absolute; width: 6em; height:6em; background-color: white; border-radius: 50%; left: 1em; top: 1em; line-height: 6em; text-align: center;
  }
  .left,.right{width: 4em;height: 8em;overflow: hidden; position: relative; float: left;background-color: red;}
  .left{ border-radius: 8em 0 0 8em;}
  .right{ border-radius: 0 8em 8em 0;}
  .left:after,.right:after{content:"";  position:absolute; display:block; width: 4em;height: 8em; background-color: white;border-radius: 8em 0 0 8em;}
  .right:after{content:"";  position:absolute; display:block;   border-radius: 0 8em 8em 0; }
</style>
<div class="loading">
  <div class="left"></div>
  <div class="right"></div>
  <div class="progress">85%</div>
</div>

  布局使用了伪元素,很容易看懂就不解释了,整个动画过程分为4步:        

  第1步,开始红色部分是隐藏的(相对于图中的位置以圆心为中心点旋转180度),B以圆心为中心点旋转后出现在视野里,直到旋转度数达到180度;

  第2步:此时B静止不动,A开始旋转到180度,在视觉上看起来就像是B继续在旋转;

  第3步:此时整个圆都出现在用户视野,就如图二的样子,要使loading动画循环播放,此时应该让B继续旋转到360度,A静止不动;

  第4步:第3步执行完之后,B消失在用户视野并静止不动,A继续旋转到360度即回到原点完成一个回合。

  用示意图表示如下:

  

  为了便于计算,假设一个回合的时间为4s,每一步用时1s钟,每一步占整个动画的25%,总结起来就是:

  0%—25%:B旋转到180deg

  25%—50%:B静止,A旋转到180deg

  50%—75%:A静止,B继续旋转到360deg回到原点

  75%—100%:B静止,A继续旋转到360deg回到原点结束一个回合

  用关键帧表示如下:

  

  // B执行的关键帧
  @-webkit-keyframes rotateB{
    25%,50%{transform:rotateZ(180deg);}
    75%,100%{transform:rotateZ(360deg);}
  }
  // A执行的关键帧
  @-webkit-keyframes rotateA{
    0%,25%{transform:rotateZ(0deg);}
    50%,75%{transform:rotateZ(180deg);}
    100%{transform:rotateZ(360deg);}
  }

  重点就是这个关键帧,最后,附上整个demo

  

<style>
  .loading{margin:100px auto; width: 8em; height: 8em; position: relative;}
  .loading .progress{position: absolute; width: 6em; height:6em; background-color: white; border-radius: 50%; left: 1em; top: 1em; line-height: 6em; text-align: center;
  }
  .left,.right{width: 4em;height: 8em;overflow: hidden; position: relative; float: left;background-color: red;}
  .left{ border-radius: 8em 0 0 8em;}
  .right{ border-radius: 0 8em 8em 0;}
  .left:after,.right:after{content:"";  position:absolute; display:block; width: 4em;height: 8em; background-color: white;border-radius: 8em 0 0 8em;}
  .right:after{content:"";  position:absolute; display:block;   border-radius: 0 8em 8em 0; }
  @-webkit-keyframes rotateB{
    25%,50%{transform:rotateZ(180deg);}
    75%,100%{transform:rotateZ(360deg);}
  }
  @-webkit-keyframes rotateA{
    0%,25%{transform:rotateZ(0deg);}
    50%,75%{transform:rotateZ(180deg);}
    100%{transform:rotateZ(360deg);}
  }
  .left:after{-webkit-animation:rotateA 2s infinite linear; transform-origin:right center;  }
  .right:after{-webkit-animation:rotateB 2s infinite linear; transform-origin:left center;}
</style>
<div class="loading">
  <div class="left"></div>
  <div class="right"></div>
  <div class="progress">85%</div>
</div>

本文出处:By:王美建 http://www.cnblogs.com/wangmeijian/p/4449150.html 转载请保留出处。

时间: 2024-08-12 09:52:35

简单的CSS3 Loading动画的相关文章

css3 loading动画练习

以下为css3制作的loading动画. HTML为: 1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 5 <title>css3加载动画</title> 6 <link rel="stylesheet" t

带缺口的圆环CSS3 Loading动画

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

CSS3 loading动画实现思路

效果大致如下: 主要实现方式: 该效果主要用到animation-timing-function中的steps()函数,该函数主要用于分步隐藏不同模块. 实现思路: 第一步动画: 第二步动画: 第三步动画: 第四步动画: 旋转半圆: 将gif动画分解为四步实现,每一步都是由旋转半圆旋转实现动画效果,再通过steps函数分步隐藏不同模块实现整个连贯动画. 全部代码: 1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>&l

简单通过Css3 图片动画

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <link rel="stylesheet" href="Css/index.css"> 7 </head> 8 <body> 9

分享web前端七款HTML5 Loading动画特效集锦

以前我们大部分的Loading动画都是利用gif图片实现的,这种图片实现Loading动画的方法虽然也很不错,但是作为HTML5开发者来说,如果能利用HTML5和CSS3实现这些超酷的Loading动画,那将是一件非常痛快的事情. 1.HTML5 Canvas发光Loading动画 之前我们分享过很多基于CSS3的Loading动画效果,相信大家都很喜欢.今天我们要来分享一款基于HTML5 Canvas的发光Loading加载动画特效.Loading旋转图标是在canvas画布上绘制的,整个lo

一个简单的loading动画,version 1.0

一个简单的loading动画:如图 点我查看

10个样式各异的CSS3 Loading加载动画

前几天我在园子里分享过2款很酷的CSS3 Loading加载动画,今天又有10个最新的Loading动画分享给大家,这些动画的样式都不一样,实现起来也并不难,你很容易把它们应用在项目中,先来看看效果图: 你也可以在这里查看DEMO演示. 下面我们来挑选几个比较典型的案例来分析一下代码. 先来看看第一个案例,是条状动画,HTML代码如下: <div id="caseVerte"> <div id="case1"></div> <

利用css3的animation实现点点点loading动画效果(二)

box-shadow实现的打点效果 简介 box-shadow理论上可以生成任意的图形效果,当然也就可以实现点点点的loading效果了. 实现原理 html代码,首先需要写如下html代码以及class类名: 订单提交中<span class="dotting"></span> css代码 .dotting { display: inline-block; min-width: 2px; min-height: 2px; box-shadow: 2px 0 c

css3实现简易loading动画

css3已经火的不行,我还很淡(dan)定(teng)地在啃着css2,表示很惭愧啊 周末抽点时间看了下loading效果的实现,开始看到css3有点头大,感觉是不是向外面说的那样每一次标准的发布都像是在学习一门新语言呢,称有些惶恐... 说完废话了....开始show代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title&