当前位置: 首页 > news >正文

CSS-SVG-环形进度条

在这里插入图片描述

线上代码地址

<div class="circular-progress-bar">
  <svg>
    <circle class="circle-bg" />
    <circle class="circle-progress" style="stroke-dasharray: calc(2 * 3.1415 * var(--r) * (var(--percent) / 100)), 1000" />
  </svg>
</div>

<br />
<br />
<p>
  <label>进度</label>
  <input type="range" min="0" max="100" value="0" oninput="changeConfig(this, '--percent')" />
</p>
<p>
  <label>环形大小</label>
  <input type="range" min="100" max="400" value="200" oninput="changeConfig(this, '--size', 'px')" />
</p>
<p>
  <label>进度条宽度</label>
  <input type="range" min="1" max="50" value="10" oninput="changeConfig(this, '--progress-border', 'px')" />
</p>
<p>
  <label>进度条颜色</label>
  <input type="color" value="#ff0000" oninput="changeConfig(this, '--progress-color')" />
</p>
<p>
  <label>背景色</label>
  <input type="color" value="#cccccc" oninput="changeConfig(this, '--bg-color')" />
  <button onclick="changeDemo({ value: 'transparent' }, '--bg-color')">透明</button>
</p>
.circular-progress-bar {
  --size: 200px; /* 环形大小 */
  --percent: 0; /* 进度 */
  --progress-border: 10px; /* 进度条宽度:要带单位,不然计算半径的时候有问题,要和 --size 统一 */
  --progress-color: red; /* 进度条颜色 */
  --bg-color: green; /* 不是进度条的颜色 */
  position: relative;
  width: var(--size);
  height: var(--size);
  border-radius: 50%;
}
.circular-progress-bar::before {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  counter-reset: progress var(--percent);/* 用于重置计数器的初始值,并且命名为progress */
  content: counter(progress) "%";
  white-space: nowrap;
  font-size: 18px;
}

.circular-progress-bar svg {
  width: 100%;
  height: 100%;
}
.circular-progress-bar svg circle {
  --r: calc((var(--size) - var(--progress-border)) / 2);
  fill: none;
  stroke-width: var(--progress-border);
  stroke-linecap: round;
  stroke: var(--progress-color);
  transition: stroke-dasharray 0.3 linear;
  cx: calc(var(--size) / 2);
  cy: calc(var(--size) / 2);
  r: var(--r);
}
.circular-progress-bar svg .circle-bg {
  stroke: var(--bg-color);
}

.circular-progress-bar svg .circle-progress {
  opacity: var(--percent); /* 进度:0 的时候不需要显示 */
}

const progressEl = document.querySelector('.circular-progress-bar');

function changeConfig({ value }, property, unit = '') {
  progressEl.style.setProperty(property, value + unit);
}

相关文章:

  • c语言-string.h库函数初识
  • 使用ArcMap进行选址服务,适宜性分析
  • kubernetes集群 应用实践 kafka部署
  • Vue2+element-ui 实现select选择器结合Tree树形控件实现下拉树效果
  • 将ncnn及opencv的mat存储成bin文件的方法
  • 听GPT 讲Rust源代码--src/tools(27)
  • 什么是高并发系统?
  • ChatGPT4.0(中文版)国内无限制免费版(附网址)
  • 15. 三数之和
  • conda移除环境
  • 【译文】IEEE白皮书 6G 太赫兹技术的基本原理 2023版
  • 【第十二课】KMP算法(acwing-831 / c++代码 / 思路 / 视频+博客讲解推荐)
  • SpringMVC系列之技术点定向爆破一
  • 相比于其他流处理技术,Flink的优点在哪?
  • 3D动态路障生成
  • 【Qt-Button】
  • 蓝牙物联网智能安防系统设计方案
  • 工程监测振弦采集仪的信号处理与分析方法研究
  • 基于RocketMQ实现分布式事务
  • mac下jd-gui提示没有找到合适的jdk版本
  • 确诊前列腺癌后,拜登首次发声
  • 安徽凤阳县明中都鼓楼楼宇顶部瓦片部分脱落,无人员伤亡
  • 前四月国家铁路发送货物12.99亿吨,同比增长3.6%
  • 事关中国,“英伟达正游说美国政府”
  • 释新闻|拜登确诊恶性前列腺癌,预后情况如何?
  • 世界高血压日|专家:高血压患者控制血压同时应注重心率管理