css3圆形进度条

前几天在网上看到了一个css3的进度条,自己想了下。做了一个。

进度条由4层构成,最下面的一层表示初始状态,我用蓝色的圆形div表示,第二层到第四层用来做进度动画用,第二层的圆是由一个宽高都为0的div,加上border和圆角做出来的,初始状态的时候,border的颜色全都是透明,旋转45度。第三层是一个1/4圆,用来旋转用的,当这个圆开始旋转的时候,第二层的圆的border-top-color变成最终的颜色,我用的紫色,当这个圆转到90度的时候,第二层的圆的右边框变为紫色。由于有动画效果,在0%的时候右边框是透明的,25%的时候变成了紫色,中间有个颜色变化过程,这不是我要的,应该有的效果是25%的时候,右边框瞬间变成紫色,为了达到这个效果,可以在0%到24%之间的时候都是上边框的颜色为紫色,24%到25%之间的时间很短,看不出逐渐变颜色。

还有一个问题就是1/4圆从旋转270度到360度的时候,在大圆的右边1/4圆的区域里面会出现小圆,实际效果是小圆从1/4的圆变小到没有,也就是扇形区域变小,为了解决这个问题就加入第四个圆,这个圆和小圆一样大,位置一样,就只有颜色不一样,颜色为紫色,这个圆刚开始隐藏,等小圆旋转到25%进度的时候显示,因为这个时候第二个圆的上边框已经出现,并且和第四个圆颜色一样,所以看不出第四个圆出现。

最后一个问题就是当动画结束的时候,会一瞬间变回原来的颜色,我想要的效果是最后整个圆是紫色的,而不会变回蓝色,这个就设置一下各个动画的animation-fill-mode:forwards;让动画结束的时候的状态为动画结束的状态,而不是开始的状态。

代码如下,我设置的是无限次,把infinite改成数字可以换成对应的循环次数。代码是在jsbin上写的,css3的属性只写了webkit的前缀。http://jsbin.com/xovok/11/watch?html,css,output

<!DOCTYPE html>
<!--
Created using JS Bin
http://jsbin.com

Copyright (c) 2014 by wuxiandiejis (http://jsbin.com/xovok/7/edit)

Released under the MIT license: http://jsbin.mit-license.org
-->
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
<style id="jsbin-css">
body,div{margin:0;padding:0}
.outer{
width:0;
heigh:0;
border-radius:50%;
border:100px solid skyblue;
position:relative;
margin:50px auto;
}
.inner{
width:0;
height:0;
position:absolute;
top:-100px;
left:-100px;
border:100px solid transparent;
border-radius:50%;
-webkit-transform:rotate(45deg);
-webkit-animation:change_color 5s infinite linear forwards;
}
.rotate,.hide{
width:100px;
height:100px;
position:absolute;
top:-100px;
left:0;
border-top-right-radius:100px;
position:absolute;
top:-100px;
left:0;
}
.rotate{
background:skyblue;
background:skyblue;-webkit-transform-origin:0 100%;
-webkit-animation:move 5s infinite linear;
}
.hide{
background:purple;
visibility:hidden;
-webkit-animation:hide 5s infinite linear forwards;
}
/*旋转动画*/
@-webkit-keyframes move{
   0%{
       -webkit-transform:rotate(0deg);
   }
   100%{-webkit-transform:rotate(360deg);}
}
/*第二层变颜色*/
@-webkit-keyframes change_color{
   0%{
      border-color:purple transparent transparent transparent;
    }
24%{border-color:purple transparent transparent transparent}
   25%{
      border-color:purple purple transparent transparent;
    }
   49%{
      border-color:purple purple transparent transparent;
    }
   50%{border-color:purple purple purple transparent}
   74%{border-color:purple purple purple transparent}
    75%{
      border-color:purple;
    }
    100%{border-color:purple}
}
@-webkit-keyframes hide{
0%{visibility:hidden}
24%{visibility:hidden}
25%{visibility:visible}
100%{visibility:visible}
}

</style>
</head>
<body>
    <div class="outer">
      <div class="inner"></div>
      <div class="rotate"></div>
      <div class="hide"></div>
    </div>
</body>
</html>
时间: 2024-12-11 13:17:25

css3圆形进度条的相关文章

利用css3动画和border来实现圆形进度条

最近在学习前端的一些知识,发现border的功能十分强大啊! 首先来看看demo 就是这么一个圆形的进度条,在文本框中输入0-100的数值下面的进度条相应的转到多少 这个主要是利用border,旋转和css动画来实现的,主要思想是利用两个div来互相遮挡border形成的一个只有半圈有颜色的圆形,再利用旋转div的角度来调整显示 上代码: html+css+js(这里引入了jquery) <!DOCTYPE html> <html lang="en"> <

纯CSS3制作圆形进度条所遇到的问题

近日在开发的页面中,需要制作一个动态的圆形进度条,首先想到的是利用两个矩形,宽等于直径的一半,高等于直径,两个矩形利用浮动贴在一起,设置overflow:hidden属性,作为盒子,内部有一个与其宽高相等的子盒子,左侧的子盒子左上角和左下角以及右侧子盒子的右上角和右下角利用border-radius:半径,这样两个矩形便组成了一个完整的圆形. 我们让左侧的子盒子绕着右边的中点旋转180°,这样左侧的半圆就隐藏了,右侧半圆同理.这个地方设置旋转中心是用的transform-origin属性,第一个

CSS3实现圆形进度条

介绍 闲来无事,去了CSS3Plus网站逛了逛,发现了一个很有意思的实现--css3实现进度条.粗略看了下代码,发现原理其实很简单,不难理解. 现在在此讲述下原理并实现一个1s更新的进度条. 技术细节是这样的:进度条由两个半圆环组成,首先我们的任务是实现左右两个半圆环.圆环可以用border-radius实现,这样就意味着该方 法不兼容IE8.可以使用clip来完成对整圆环的剪切:使用rotate函数完成圆环的旋转,通过设置两个半圆环的旋转角度来实现不同进度值的显示. clip属性是css2属性

异步下载圆形进度条显示进度

圆形进度条参考链接即可:使用css3实现圆形进度条 需求点击下载后遮罩层显示下载进度: 1.圆形进度条参考以上链接,有点小瑕疵,可更改定位距离实现重合. 2.遮罩层: .lbOverlay{ display: none; position: fixed; left: 0; top: 0; zoom: 1; background: black; z-index: 99999; width:100%; height:100%; filter:alpha(opacity=70); /*IE滤镜,透明度

自定义圆形进度条

关于控件呢,我想大家应该都很熟悉了吧,android应用开发MVC架构中,控件担任着至关重要的作用,感觉可以说是基于控件的事件模型人机交互的基础吧.这种特性感觉在wpf开发中体现得更为直接,感兴趣的同学可以去了解一下.而android框架自身就已经给我们提供了很多控件.那么问题来了?为什么有那么多控件可以用,你还要去屑自定义控件呢?是因为大家闲的蛋疼吗?显然不是.个人认为只要有两方面吧,要么是觉得有些原生控件是在是丑得难以忍受(即使是在你已经自定义了他的shape,圆角,selector等一系列

Android自定义View——圆形进度条式按钮

介绍 今天上班的时候有个哥们问我怎么去实现一个按钮式的进度条,先来看看他需要实现的效果图. 和普通的圆形进度条类似,只是中间的地方有两个状态表示,未开始,暂停状态.而且他说圆形进度的功能已经实现了.那么我们只需要对中间的两个状态做处理就行了. 先来看看实现的效果图: 上面说了我们只需要处理中间状态的变化就可以了,对于进度的处理直接使用了弘洋文章中实现: http://blog.csdn.net/lmj623565791/article/details/43371299 下面开始具体实现. 具体实

Html5基于SVG的扁平风格圆形进度条javascript插件教程

一.使用方法 使用该圆形进度条需要引入circleDonutChart.js文件. <script type="text/javascript" src="circleDonutChart.js"></script> 二.Html结构 你可以使用一个空的<div>元素来制作圆形进度条. <div id="example1"></div> 三.初始化插件 要制作圆形进度条,可以使用下面的方

Android 高手进阶之自定义View,自定义属性(带进度的圆形进度条)

转载请注明地址:http://blog.csdn.net/xiaanming/article/details/10298163 很多的时候,系统自带的View满足不了我们功能的需求,那么我们就需要自己来自定义一个能满足我们需求的View,自定义View我们需要先继承View,添加类的构造方法,重写父类View的一些方法,例如onDraw,为了我们自定义的View在一个项目中能够重用,有时候我们需要自定义其属性,举个很简单的例子,我在项目中的多个界面使用我自定义的View,每个界面该自定义View

CAShapeLayer实现圆形进度条效果

一.CAShapeLayer简介: 1.CAShapeLayer继承至CALayer,可以使用CALayer的所有属性值 2.CAShapeLayer需要与贝塞尔曲线配合使用才有意义 3.使用CAShapeLayer与贝塞尔曲线可以实现不在view的drawRect方法中画出一些想要的图形 4.CAShapeLayer属于CoreAnimation框架,其动画渲染直接提交到手机的GPU当中,相较于view的drawRect方法使用CPU渲染而言,其效率极高,能大大优化内存使用情况 五角星动画 #