css 实现彩色渐变圆环进度条

css 实现彩色渐变圆环进度条

<template>
  <svg width="440" height="440" viewBox="0 0 440 440">
    <defs>
      <linearGradient x1="1" y1="0" x2="0" y2="0" id="gradient">
        <stop offset="0%" stop-color="#e52c5c"></stop>
        <stop offset="100%" stop-color="#ab5aea"></stop>
      </linearGradient>
    </defs>
    <circle cx="220" cy="220" r="170" class="circle-track"></circle>
    <circle
      cx="220"
      cy="220"
      r="170"
      transform="rotate(-90 220 220)"
      class="circle-bar"
    ></circle>
    <text
      class="text"
      x="50%"
      y="50%"
      dominant-baseline="middle"
      text-anchor="middle"
    >
      90%
    </text>
  </svg>
</template>

<style scoped>
circle {
  stroke-width: 50px;
  fill: none;
  stroke-dasharray: 1069px;
  /* 灰色进度槽 */
  stroke: #f0f1f5;
}
/* 渐变进度条 */
.circle-bar {
  /* stroke-dashoffset慢慢变小,进度条就会慢慢出现 */
  stroke-dashoffset: 106.9px;
  stroke: url(#gradient);
}
</style>

改变stroke-dashoffset属性值,就能设置对应的进度效果

其中的1069px是圆环的周长,使用公式Length=Math.PI**2计算得来。由于圆形描边是从3点钟方向开始的,因此第二个<circle>元素设置了transform="rotate(-90220220)"逆时针旋转90度让描边从圆的顶部开始。

如果是不规则路径,则可以使用下面两行JavaScript代码获得路径的长度值:

var path = document.querySelector('path');
var length = path.getTotalLength();

实现原理

设置两个SVG<circle>元素,下层的<circle>元素使用灰色描边,作为进度槽;上层的<circle>元素设置为虚线描边,同时使用渐变进行描边填充。然后通过改变stroke-dashoffset的属性值就可以让渐变描边一点一点地出现,于是一个彩色渐变圆环进度条效果就实现了。

上一篇:【CCF-CSP】模版生成系统


下一篇:光速联提速脚本使用技巧