【发布时间】:2020-04-22 11:28:11
【问题描述】:
我需要制作一个带有颜色渐变的圆形进度指示器。我还需要将进度圈的“末端”四舍五入。这张图片包含了我想要实现的一切:
这段代码很接近,但没有颜色渐变:
https://codepen.io/adsfdsfhdsafkhdsafjkdhafskjds/pen/OJybqza
var control = document.getElementById('control');
var progressValue = document.querySelector('.progress__value');
var RADIUS = 54;
var CIRCUMFERENCE = 2 * Math.PI * RADIUS;
function progress(value) {
var progress = value / 100;
var dashoffset = CIRCUMFERENCE * (1 - progress);
console.log('progress:', value + '%', '|', 'offset:', dashoffset)
progressValue.style.strokeDashoffset = dashoffset;
}
control.addEventListener('input', function(event) {
progress(event.target.valueAsNumber);
});
progressValue.style.strokeDasharray = CIRCUMFERENCE;
progress(60);
.demo {
flex-direction: column;
display: flex;
width: 120px;
}
.progress {
transform: rotate(-90deg);
}
.progress__meter,
.progress__value {
fill: none;
}
.progress__meter {
stroke: grey;
}
.progress__value {
stroke: blue;
stroke-linecap: round;
}
<div class="demo">
<svg class="progress" width="120" height="120" viewBox="0 0 120 120">
<circle class="progress__meter" cx="60" cy="60" r="54" stroke-width="12" />
<circle class="progress__value" cx="60" cy="60" r="54" stroke-width="12" stroke="url(#gradient)" />
</svg>
<input id="control" type="range" value="60" />
</div>
我尝试在笔划中添加linear-gradient,但没有效果:
stroke: linear-gradient(red, yellow);
我也试过stroke="url(#linearColors)",但也没有影响。
<div class="demo">
<svg class="progress" width="120" height="120" viewBox="0 0 120 120">
<linearGradient id="linearColors" x1="0" y1="0" x2="1" y2="1">
<stop offset="5%" stop-color="#01E400"></stop>
<stop offset="25%" stop-color="#FEFF01"></stop>
<stop offset="40%" stop-color="#FF7E00"></stop>
<stop offset="60%" stop-color="#FB0300"></stop>
<stop offset="80%" stop-color="#9B004A"></stop>
<stop offset="100%" stop-color="#7D0022"></stop>
</linearGradient>
<circle class="progress__meter" cx="60" cy="60" r="54" stroke-width="12" />
<circle class="progress__value" cx="60" cy="60" r="54" stroke-width="12" stroke="url(#linearColors)" />
</svg>
<input id="control" type="range" value="60" />
</div>
【问题讨论】:
-
可能是因为您的笔画网址错误?渐变定义的 id 是“linearColors”,但你的 url 有 #gradient。
-
@MichaelMullany 我试过了并更新了我的问题,但没有改变。
-
SVG 不支持“沿路径的渐变”或“围绕圆的渐变”(有时称为圆锥渐变)。如果你想要那种效果,你需要使用许多小元素来模拟渐变(根据 Robert 的链接)。
标签: svg