css3动画实现类菊花loading效果

实现一个loading效果,需要分平台来考虑。

1.在PC端,因为IE9及其以下的版本实现不了CSS3动画效果,所以用CSS3是实现不了的,在这里比较建议使用gif的动态图片来实现,能兼容各主流浏览器。

在这里介绍一个很好用的在线loading生成工具,方便、快捷!http://preloaders.net/en/circular

2.在移动端,不考虑winphone上低版本的浏览器时(winphone低版本浏览器是指采用IE9及其以下的内核),用css3实现其效果是比较好的选择。

 

下面介绍移动端的CSS3实现类菊花loading效果:

实现的思路是:画出12个点,类似于时钟12个点

       用旋转和变换,给12个点进行定位:即每个点旋转相差30度角,定义纵向移动距离相同,统一为34px

       设置每个点的延迟时间,使达到每个点执行的时间不同。这里设置了12个点的总共执行时间是2S,所以每个点的延迟执行时间相差1/6S

       每个点的变化效果是opacity、width、height都逐渐变化

 

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type"  content="text/html; charset=utf-8" />
<meta http-equiv="Cache-Control" content="no-cache" />
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" />
<meta name="MobileOptimized" content="320"/>
<title>loading</title>
<style>
        @-webkit-keyframes loading {
            from {opacity: 1;width:1px;height:1px;}
            to {opacity: 0.25;width:8px;height:8px;}
        }
        div.spinner {
            position: absolute;
            top:50%;
            left:50%;
            display: inline-block;
        }
        div.spinner div {
            width:8px;
            height:8px;
            background: #a4a2a4;
            border:1px solid #fff;
            position: absolute;
            left: 100%;
            top: 100%;
            opacity: 0;

            -webkit-animation: loading 2s linear infinite;
            -webkit-border-radius: 30px;
        }
        div.spinner div.bar1 {-webkit-transform:rotate(0deg) translate(0, -34px); -webkit-animation-delay: -0s;}
        div.spinner div.bar2 {-webkit-transform:rotate(30deg) translate(0, -34px); -webkit-animation-delay: -1.8334s;}
        div.spinner div.bar3 {-webkit-transform:rotate(60deg) translate(0, -34px); -webkit-animation-delay: -1.6668s;}
        div.spinner div.bar4 {-webkit-transform:rotate(90deg) translate(0, -34px); -webkit-animation-delay: -1.5002s;}
        div.spinner div.bar5 {-webkit-transform:rotate(120deg) translate(0, -34px); -webkit-animation-delay: -1.3336s;}
        div.spinner div.bar6 {-webkit-transform:rotate(150deg) translate(0, -34px); -webkit-animation-delay: -1.167s;}
        div.spinner div.bar7 {-webkit-transform:rotate(180deg) translate(0, -34px); -webkit-animation-delay: -1.0004s;}
        div.spinner div.bar8 {-webkit-transform:rotate(210deg) translate(0, -34px); -webkit-animation-delay: -0.8338s;}
        div.spinner div.bar9 {-webkit-transform:rotate(240deg) translate(0, -34px); -webkit-animation-delay: -0.6672s;}
        div.spinner div.bar10 {-webkit-transform:rotate(270deg) translate(0, -34px); -webkit-animation-delay: -0.5006s;}
        div.spinner div.bar11 {-webkit-transform:rotate(300deg) translate(0, -34px); -webkit-animation-delay: -0.334s;}
        div.spinner div.bar12 {-webkit-transform:rotate(330deg) translate(0, -34px); -webkit-animation-delay: -0.1674s;}
    </style>
</head>
<body style="margin:auto;width:300px;">
    
    <div class="spinner">
        <div class="bar1">
        </div>
        <div class="bar2">
        </div>
        <div class="bar3">
        </div>
        <div class="bar4">
        </div>
        <div class="bar5">
        </div>
        <div class="bar6">
        </div>
        <div class="bar7">
        </div>
        <div class="bar8">
        </div>
        <div class="bar9">
        </div>
        <div class="bar10">
        </div>
        <div class="bar11">
        </div>
        <div class="bar12">
        </div>
    </div>
</body>
</html>

 

只要把上面每个点的width、height、border-radius还有@-webkit-keyframes loading里面改动一下,就能够实现如下其他效果:

  

 

源代码下载:点击这里

 

posted @ 2014-04-23 10:04  Joy Ho  阅读(4878)  评论(0编辑  收藏  举报