You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将SVG环形进度条的纯色描边替换为红黄绿锥形渐变?

将SVG环形进度条的纯色描边替换为锥形渐变

SVG的<circle>描边无法直接应用CSS锥形渐变,我们可以通过SVG遮罩+渐变背景的方式实现需求,以下是完整修改方案:

1. 修改SVG结构

添加<defs>定义遮罩和锥形渐变(用线性渐变模拟锥形效果,配合旋转实现环形渐变):

<svg xmlns="http://www.w3.org/2000/svg"
     viewBox="-1 -1 34 34">
  <defs>
    <!-- 定义环形遮罩,用于裁剪渐变背景,控制进度显示 -->
    <mask id="progress-mask">
      <!-- 白色填充作为遮罩基底 -->
      <rect width="100%" height="100%" fill="white" />
      <!-- 遮罩中的环形,通过stroke-dasharray控制进度 -->
      <circle cx="16" cy="16" r="15.9155" fill="none" stroke="black" 
              stroke-width="1.8" stroke-dasharray="100 100" 
              stroke-dashoffset="100" class="js-progress-mask" />
    </mask>
    <!-- 定义三色锥形渐变(通过线性渐变+旋转模拟) -->
    <linearGradient id="conic-gradient" x1="0" y1="0" x2="1" y2="1">
      <stop offset="0%" stop-color="red" />
      <stop offset="33%" stop-color="yellow" />
      <stop offset="100%" stop-color="green" />
    </linearGradient>
  </defs>

  <!-- 背景环形 -->
  <circle cx="16" cy="16" r="15.9155" class="progress-bar__background" />
  
  <!-- 带渐变的进度层:矩形应用渐变,通过遮罩显示环形进度 -->
  <rect width="100%" height="100%" fill="url(#conic-gradient)" 
        mask="url(#progress-mask)" transform="rotate(-90 16 16)" />
</svg>

2. 更新CSS样式

移除原进度条的纯色描边样式,改为控制遮罩中的环形:

$progress-bar-stroke-width: 1.8;
$progress-bar-size: 300px;

svg {
  height: $progress-bar-size;
  width: $progress-bar-size;
}

.progress-bar__background {
  fill: none;
  stroke: #e2eff0;
  stroke-width: $progress-bar-stroke-width;
}

// 控制遮罩中的环形进度
.js-progress-mask {
  fill: none;
  stroke: black;
  stroke-width: $progress-bar-stroke-width;
  stroke-dasharray: 100 100;
  stroke-dashoffset: 100;
  transition: stroke-dashoffset 1s ease-in-out;
}

3. 调整JS逻辑

将进度控制目标从原进度环形改为遮罩中的环形:

var percentageComplete = 0.6;
var strokeDashOffsetValue = 100 - (percentageComplete * 100);
var progressMask = $(".js-progress-mask");
progressMask.css("stroke-dashoffset", strokeDashOffsetValue);

原理说明

  • 用<mask>创建一个环形镂空区域,通过stroke-dasharray控制镂空的长度(即进度);
  • 用带线性渐变的矩形作为背景,旋转后模拟锥形渐变效果;
  • 遮罩会只显示矩形与环形镂空重合的部分,最终呈现出带锥形渐变的环形进度条。

内容的提问来源于stack exchange,提问作者pumpk1n

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 02:40:32