首先实现一个静态的圆形进度条

他的实现其实就是两个半圆,然后通过旋转半圆的度数来达到整个圆形的效果

先来看看如何实现一个半圆

.circleProgress{

width: 160px;

height: 160px;

border:20px solid transparent;

border-radius: 50%;

position: absolute;

top:0;

-webkit-transform: rotate(45deg);

}

image.png

为什么要旋转45°,可以自己去审查元素并且改变度数看看效果。

第一个半圆实现了。接下来实现左边的半圆

代码和右边的相反即可

.leftcircle{

border-bottom:20px solid green;

border-left:20px solid green;

left:0;

}

image.png

接下来就要实现动画效果了。

先让右半圆弧旋转180度,再让左半圆弧旋转180度,这样,两个半圆弧由于先后都全部溢出而消失了

.rightcircle{

border-top:20px solid green;

border-right:20px solid green;

right:0;

-webkit-animation: circleProgressLoad_right 5s linear infinite;

}

.leftcircle{

border-bottom:20px solid green;

border-left:20px solid green;

left:0;

-webkit-animation: circleProgressLoad_left 5s linear infinite;

}

@-webkit-keyframes circleProgressLoad_right{

0%{

-webkit-transform: rotate(45deg);

}

50%,100%{

-webkit-transform: rotate(225deg);

}

}

@-webkit-keyframes circleProgressLoad_left{

0%,50%{

-webkit-transform: rotate(45deg);

}

100%{

-webkit-transform: rotate(225deg);

}

}

这样就完成了。 要想实现计时的效果只需要修改一下两个半圆的起始度数,和动画里的度数即可。

接下来试着用js来实现动态的计时。

function action() {

//先拿到两个半圆

let left = document.getElementById('left')

let right = document.getElementById('right')

let time = 5000 进度条的总时间,可以是一个变量。

let sj = 20 拟定一个运动间隔时间,就是多久动一次

let dushu = 360 / (time / sj) 通过总度数除以(总时间除以时间间隔)得到每次运动多少度数

let rightchushudushu = -135 右半圆的初始度数,这个度数刚好被隐藏掉

let leftchushidushu = -135 同上

let cc = setInterval(() => {

console.log(new Date)

if (rightchushudushu >= 45) {

if (leftchushidushu >= 45) {

clearInterval(cc)

} else {

leftchushidushu += dushu

if (leftchushidushu > 45) {

leftchushidushu = 45

right.style.cssText = `-webkit-transform: rotate(${leftchushidushu}deg);`

}

right.style.cssText = `-webkit-transform: rotate(${leftchushidushu}deg);`

}

} else {

rightchushudushu += dushu

if (rightchushudushu > 45) {

rightchushudushu = 45

} else {

left.style.cssText = `-webkit-transform: rotate(${rightchushudushu}deg);`

}

}

}, sj)

}

总时间需要换算成定时器的时间格式,比如60s 就是60000. 千万不要直接用总度数去除以总时间。这样算出来的距离,这样计算出来的结果。进度条动起来就会一顿一顿,没有那么丝滑了。自己去拟定一个运动间隔时间。然后通过这个时间去计算每次运动的距离。这样实现的效果就会很顺畅,不会一顿一顿。

定时器中的代码有点冗余了,可以自行更改。这里投一下懒,就不改了。说一下里面需要注意的点。

在每次累加度数时,需要去判断一下当前度数是不是大于或等于45度了。如果是,那就直接将度数设置成45度。因为在累加的过程中。计算出来的度数不是整数,有可能会超过45度。这样半圆就会多移动一点距离。整个进度条就会有瑕疵。

js css 实现进度条,css+js实现圆形进度条相关推荐

  1. android绘制环形进度_Android使用Canvas绘制圆形进度条效果

    前言 Android自定义控件经常会用到Canvas绘制2D图形,在优化自己自定义控件技能之前,必须熟练掌握Canvas绘图机制.本文从以下三个方面对Canvas绘图机制进行讲解: 画布Canvas ...

  2. Android自定义圆形下载进度条,Android自定义之圆形进度条

    先来看看效果图,有图才有真相: Usage Android Studio 使用Gradle构建 dependencies { compile 'com.github.ws.circleprogress ...

  3. qt 进度条最小_QT:圆形进度条设计

    QT版本:win32 QT Creator5.9.9 在QT中只有横条状的进度条,目前需要使用圆形状进度条显示进度,只能自己设计一个,可以显示圆弧.圆圈和中心文本. 设计思路: ①设计一个QWidge ...

  4. ios弧形进度条_IOS贝塞尔曲线圆形进度条和加载动画-阿里云开发者社区

    做项目让做一个加载动画,一个圈圈在转中间加一个图片,网上有好多demo,这里我也自己写了一个,中间的图片可加可不加.其中主要用到贝塞尔曲线.UIBezierPath是对CGContextRef的进一步 ...

  5. Android自定义View之画圆环(进阶篇:圆形进度条)

    前言: 如果你想读懂或者更好的理解本篇文章关于自定义圆环或圆弧的内容.请你务必提前阅读下Android自定义View之画圆环(手把手教你如何一步步画圆环).在这篇文章中,详细描述了最基本的自定义圆环的 ...

  6. html鼠标滑过导航条展开导航条,JS+CSS实现鼠标滑过时动态翻滚的导航条效果

    本文实例讲述了JS+CSS实现鼠标滑过时动态翻滚的导航条效果.分享给大家供大家参考.具体如下: 这是一款鼠标悬停时动态翻滚的导航条,注意这里用了两个背景图,请等待网页加载完成或多刷新几次,这个是使用J ...

  7. css实现圆形进度条加载动画

    这里我会把遇到这个需求时的实现过程和遇到的问题记录下来,如果只是要看最终实现结果可直接滑到底部看实现代码. 我们经常可以看到网上有一些圆形进度条跟随数字的变化慢慢变成一个圆,这个动画实际上可以通过纯c ...

  8. HTML + CSS 实现矩形/圆形进度条效果 - SVG

    本文记录通过 HTML + CSS + 部分原生 JS 使用 SVG 嵌入 HTML 文档的用法实现常见的圆形和矩形进度条效果,效果图如下:(实际运行效果是进度条从 0 过渡到一个目标值比如 100% ...

  9. css原生样式支持,原生JS读写CSS样式的方法

    通过Element对象的getAttribute().setAttribute().removeAttribute()直接读写style属性 如:elm.setAttribute('style','c ...

  10. 原生js瀑布流效果,css+html+js,复制下来可直接使用

    html里面总共需要引入三个文件 css文件两个,js代码一个 :::json文件里面的图片就自己增改把 html页面 <div class="container" id=& ...

最新文章

  1. Django 缓存6.2
  2. 数据分析之Pandas分组操作总结
  3. 使用librdkafka的C++接口实现简单的生产者和消费者
  4. 在ubuntu16下安装virtualenv+virtualenvwrapper
  5. 结构体中vector自动为0_面试题:你是如何选择顺序存储数据结构的?
  6. C#datagidview创立数据库,实现读写数据视频
  7. .Net中EF通用数据层小结
  8. 深度学习笔记--激活函数:sigmoid,maxout
  9. 1.什么是NoSql数据库?
  10. APP原型设计利器-墨刀MockingBot
  11. 方钢管弹性模量计算方式_弹性模量计算公式.doc
  12. 遇到svn is already locked 解决办法
  13. python任务调度demo-百度贴吧签到
  14. worldpress自定义页面
  15. 如何成为一名IC验证工程师——IC修真院直播
  16. JS判断是否含有某个字段
  17. 微信小程序:简洁UI好玩的文字转换emoji表情
  18. 【golang】处理jpeg图片压缩后方向发生变化问题
  19. php使用grpc简单教程
  20. 洛谷P1478 陶陶摘苹果(升级版)视频题解

热门文章

  1. 好用的蓝牙连接测试工具
  2. 2020计算机408考试大纲,2020考研计算机:计算机408大纲考点变化解析指导
  3. VMWareStation10 密钥
  4. TDengine在智慧城市大数据管理系统中的应用实践
  5. 软通动力:致力智慧城市与大数据协同发展
  6. 3dmax电脑配置要求(3dmax需要什么样的笔记本配置?)
  7. 软件_可用rtmp直播地址20200517
  8. php中wamp具体指的是,phpwamp和wampserver有什么关系,为什么名字都带wamp这几个字母,两者有区别吗?我应该用哪个?...
  9. 翻译python代码的软件_使用Python3中的gettext模块翻译Python源码以支持多语言
  10. 使得在虚拟机能复制粘贴 -- Linux安装增强