使用CSS3实现圆形进度条

导语: 一般我们见到的进度条通常都是矩形的,从左往右开始推进,直到100%;但是很少有圆形的进度条,本篇文章稍微讲解下如何使用CSS3实现圆形进度条

一般我们见到的进度条通常都是矩形的,从左往右开始推进,直到100%;但是很少有圆形的进度条,本篇文章稍微讲解下如何使用CSS3实现圆形进度条。

若是只要实现一个圆环的话,我们都能写出来,用borderborder-radius就能画出来:

<style type="text/css">.demo{width : 160px;height : 160px;border: 20px solid green;border-radius : 50%;}
</style>
<div class="demo"></div>

但是这样的圆环不能动啊,而且能产生进度条效果的一个重要的因素就是得从0开始变化,而不是一个完整的圆环在旋转,这是没有意义的。首先说下我实现的思路:

  1. 把整个圆环分成左右两部分;

  2. 左右两部分都有半个圆环在旋转,比如先让右边的半圆环,旋转到正好接住了左半部分,然后左边的半圆环开始旋转。

1. 画右半圆环

我们先来设计下右半部分吧,html结构如下:

<div class="right"><div class="rightcircle"></div>
</div>

里面的.rightcircle是半个圆环,样式如下:

.right{position: relative;width: 100px;height: 200px;overflow: hidden;
}
.rightcircle{width: 160px;height: 160px;border:20px solid transparent;border-radius: 50%;position: absolute;top:0;right: 0;border-top:20px solid green;border-right:20px solid green;-webkit-transform : rotate(45deg);-moz-transform : rotate(45deg);-o-transform : rotate(45deg);transform : rotate(45deg); /* 旋转45度 */
}

当我们把这些样式写完的时候,看到的是这个样子的,因为使用的是div的上半边界和右半边界,因此需要旋转一下,才能正好是我们看到的半圆环:

因为外层的div有一个overflow:hidden属性,我们先把这个半圆旋转到div的另一边隐藏了,然后再慢慢改变这个半圆环的角度,让它显示出来不就行了。稍微计算下就可以知道,-135deg正好能隐藏在外层div的左半部分,即:

.rightcircle{width: 160px;height: 160px;border:20px solid transparent;border-radius: 50%;position: absolute;top:0;right: 0;border-top:20px solid green;border-right:20px solid green;transform : rotate(-135deg); /* 旋转45度时正好能显示半个圆,旋转-135度,正好能隐藏半个圆 */
}

20160226更新 这个-135deg是怎么得出来的呢,我们来看下面的这张图:

矩形的上边界和右边界正好是对应这上图圆形的上半部分和右半部分,旋转到左侧正好隐藏的话,那就是逆时针旋转-135deg

2. 为半圆添加动画

好了,半个圆已经隐藏住了,那么我们应该让它慢慢出来了,给.rightcircle添加一个动画:animation

/* 这里仅考虑webkit内核的情况,您可以写完整了 */
.rightcircle{-webkit-animation-name: circle_right; /* 动画名称 */-webkit-animation-duration: 5s;  /* 完成一个动画需要的时间 */-webkit-animation-timing-function: linear; /* 动画播放的方式,linear是匀速变化 */-webkit-animation-iteration-count: infinite;  /* 动画播放的次数,infinite是无限次数 */
}@-webkit-keyframes circle_right{0%{transform : rotate(-135deg);}100%{transform : rotate(45deg);}
}

那么左半部分就正好相反喽,这里我就不写了,你可以尝试着写一下。

3. 大功告成

好了,让我们把左半部分和右半部分拼接起来:

<style>.circle_process{position: relative;width: 199px;height : 200px;}.circle_process .wrapper{width: 100px;height: 200px;position: absolute;top:0;overflow: hidden;}.circle_process .right{right:0;}.circle_process .left{left:0;}.circle_process .circle{width: 160px;height: 160px;border:20px solid transparent;border-radius: 50%;position: absolute;top:0;transform : rotate(-135deg);}.circle_process .rightcircle{border-top:20px solid green;border-right:20px solid green;right:0;-webkit-animation: circle_right 5s linear infinite;}.circle_process .leftcircle{border-bottom:20px solid green;border-left:20px solid green;left:0;-webkit-animation: circle_left 5s linear infinite;}@-webkit-keyframes circle_right{0%{-webkit-transform: rotate(-135deg);}50%,100%{-webkit-transform: rotate(45deg);}}@-webkit-keyframes circle_left{0%,50%{-webkit-transform: rotate(-135deg);}100%{-webkit-transform: rotate(45deg);}}
</style>
<div class="circle_process"><div class="wrapper right"><div class="circle rightcircle"></div></div><div class="wrapper left"><div class="circle leftcircle" id="leftcircle"></div></div>
</div>

大功告成。

4. 额外功能

我们已经实现了一个圆形进度条,利用这个,我们可以实现一个小闹钟:

function getTime(){var date = new Date();var second = date.getSeconds();var rightcircle = document.getElementById('rightcircle');var leftcircle = document.getElementById('leftcircle');var show = document.getElementById('show');show.innerHTML = second;if(second<=30){rightcircle.style.cssText = "transform: rotate("+ (-135+6*second) +"deg)";leftcircle.style.cssText = "transform: rotate(-135deg)";}else{rightcircle.style.cssText = "transform: rotate(45deg)";leftcircle.style.cssText = "transform: rotate("+ (-135+6*(second-30)) +"deg)";}
}
getTime();
setInterval(function(){getTime();
}, 1000)

转载于:https://www.xiabingbao.com/css/2015/07/27/css3-animation-circle.html

使用CSS3实现圆形进度条相关推荐

  1. 前端 圆形进度图_使用CSS3实现圆形进度条

    一般我们见到的进度条通常都是矩形的,从左往右开始推进,直到100%:但是很少有圆形的进度条,本篇文章稍微讲解下如何使用CSS3实现圆形进度条 一般我们见到的进度条通常都是矩形的,从左往右开始推进,直到 ...

  2. html怎么做进度条圆形,用css3实现圆形进度条

    使用css3的圆角.旋转.剪切属性实现圆形进度条,原理不难,两次剪切加一次旋转. 进度条分左右两边,50%一下操作右边的就行,超过50%操作左边的 样式随便写的,代码如下: html部分: 0% 最内 ...

  3. 圆的css样式,圆形进度条css3样式

    30% 以下样式100upx是50upx的2倍,这是尺寸比例 .con { position: relative; display: inline-block; height: 100upx; wid ...

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

    圆形进度条参考链接即可:使用css3实现圆形进度条 需求点击下载后遮罩层显示下载进度: 1.圆形进度条参考以上链接,有点小瑕疵,可更改定位距离实现重合. 2.遮罩层: .lbOverlay{ disp ...

  5. CSS3+JS实现静态圆形进度条【清晰、易懂】

    在写这篇文章之前,笔者查看了多篇博客,无奈前辈大多只是贴了代码,没有清晰明了的注释,所以容易让新人看得云里雾里.这里,笔者在弄明白原理后,对代码进行了优化,决定写(总结)一篇清晰.明了的圆形进度条的实 ...

  6. html圆圈倒计时,html5 css3圆形进度条倒计时页面跳转代码

    特效描述:html5 css3 圆形进度条 倒计时 页面跳转代码.html5 css3进度条倒计时动画特效 代码结构 1. HTML代码 html5+css3进度条倒计时动画特效 body { mar ...

  7. android 自定义音乐圆形进度条,Android自定义View实现音频播放圆形进度条

    本篇文章介绍自定义View配合属性动画来实现如下的效果 实现思路如下: 根据播放按钮的图片大小计算出圆形进度条的大小 根据音频的时间长度计算出圆形进度条绘制的弧度 通过Handler刷新界面来更新圆形 ...

  8. Android自定义控件NumberCircleProgressBar(圆形进度条)的实现

    Android自定义控件NumberCircleProgressBar(圆形进度条)的实现

  9. html进度条圆圈渐变色,HTML5 canvas带渐变色的圆形进度条动画

    jquery-circle-progress是一款带渐变色的圆形进度条动画特效jQuery插件.该圆形进度条使用的是HTML5 canvas来绘制圆形进度条及其动画效果,进度条使用渐变色来填充,效果非 ...

最新文章

  1. jdk、jre、jvm有什么区别?
  2. Robotium中定位Android客户端疑难元素
  3. 无软件linux,无需安装即可运行或演示Linux的方法 (1)
  4. 钉钉电脑版怎么创建共享文件 钉钉文件共享的方法
  5. Skeljs – 用于构建响应式网站的前端开发框架
  6. 项目lib上传maven仓库配置
  7. 神经网络+CNN模型训练总结:
  8. 4.27 前端开发日报
  9. MATLAB导数计算
  10. 微信小程序开发【前端+后端(Java)】附完整源码
  11. 竞态条件的赋值_Go 译文之竞态检测器 race
  12. 股票数据库接口是什么意思?
  13. android手写计算器,MyScript Calculator(高级手写计算器) V1.2.2.479 安卓版
  14. JS 缓存: Service Worker 实现离线应用
  15. 用python计算100以内所有奇数的和_python如何求1到100的奇数和
  16. 数据仓库-Hive(一)
  17. 南非SABS EMC CoC简介
  18. csgo如何保存自己的cfg_CSGO进阶教程:cfg文件调试指南
  19. linux中的head 显示文件头部内容、tail 输出文件尾部内容
  20. 概要设计说明书(实例)

热门文章

  1. 概率论:3.3期望与方差
  2. vue如何通过键盘方向键切换input焦点
  3. 快来生成你专属的英文名吧(使用字符级RNN)!
  4. 网络爬虫--记一次有趣的侦察型反爬手段(ebay)
  5. 完美生成年度节假日表,Kettle还能这么玩!
  6. Google Earth Engine(GEE)扩展——制作的GEE app的误区
  7. 安装mysql提示oxc000007b_重装win7系统黑屏提示oxc000007b怎么办
  8. Unity3D游戏中隐藏鼠标光标
  9. 【AI语音】九联UNT402A_通刷_纯净精简_免费线刷固件包
  10. 利用Service实现简单的音乐播放功能