我正在尝试使用CSS和JavaScript(以及React)使SVG圆形进度条根据进度/百分比从线性渐变中改变颜色。
到目前为止,我找到的每个解决方案都有硬编码的颜色代码或使用jQuery,而我无法使用。下面是我的代码和CSS:
<svg viewBox="0 0 36 36" className="circular-chart">
<path className="svg-back"
fill='none'
stroke={props.theme.colors.Neutral.Gray1}
strokeWidth={3}
d="M18 2.0845
a 15.9155 15.9155 0 0 1 0 31.831
a 15.9155 15.9155 0 0 1 0 -31.831"
/>
<path className="circle"
stroke-dasharray={`${props.percentage} 100`}
d="M18 2.0845
a 15.9155 15.9155 0 0 1 0 31.831
a 15.9155 15.9155 0 0 1 0 -31.831"
/>
<text
x={18}
y={21}
className="svg-circle-text">
{props.percentage}%
</text>
</svg>
CSS:
.svg-circle-text {
font-size: 0.5rem;
text-anchor: middle;
fill: ${theme.colors.Primary.Black}
font-weight: bold;
}
.circular-chart {
display: block;
margin: 10px auto;
max-width: 80%;
max-height: 250px;
}
.circle {
stroke: #99DA98;
fill: none;
stroke-width: 3;
stroke-linecap: round;
animation: progress 1s ease-out forwards;
}
@keyframes progress {
0% {
stroke-dasharray: 0 100;
}
}
在另一个组件中,我有以下背景色,它作为这个圆形进度条的一种关键作用:
background: linear-gradient(
90deg,
#99da98 0%,
#f8b66a 51.56%,
#cf6767 100%
);
如果百分比为60%,则应该显示60%处的渐变值。希望能得到一些帮助。谢谢。
stroke-dasharray={
${props.percentage} 100}
。 - momal