SVG <circle> 填充覆盖上一个圆圈
SVG <circle> fill covering previous circle
我正在构建一个 svg 循环进度图。
我正在尝试设置我的 svg 笔划样式以匹配 circle.center 的可见部分,但是当我更改 circle.progress 的笔划时,它不会将圆的填充缩小到足以显示黑色部分circle.progress 并匹配实际进度条的宽度。
<svg width="300" height="300">
<circle class="progress" id="progress-radial-1" r="125"/>
<circle class="center" r="140" cx="140" cy="140" />
<text text-anchor="middle" x="150" y="185" />
</svg>
这是一个fiddle:https://jsfiddle.net/BenRacicot/2kc7c56j/
这是 svg 的结果(左):
我正在努力获得正确的结果。如您所见,控制蓝色进度条(50%)的 circle.center 也有一个填充,该填充在图像中为白色(在 fiddle 中为灰色)并且过多地覆盖了黑色 svg 描边。我需要那个笔划与蓝色的宽度相同。
center
和 progress
圆的原点不同,应该相同(现在设置为 150)。
现在 center
的半径比 progress
小 25 像素,以适合其笔划。
因此,如果您像这样更新标记,将 center
的填充更改为 #ddd
,并将 svg
背景更改为 #000
,您将获得适合您的布局想要
<div class="pie-wrapper">
<svg width="300" height="300">
<circle class="progress" id="pr1" r="125" cx="150" cy="150"/>
<circle class="center" r="100" cx="150" cy="150" />
<text text-anchor="middle" x="150" y="175" />
</svg>
</div>
堆栈片段
window.addEventListener('load', function() {
function radialProgress(update, id){
let rd = document.getElementById(id).getAttribute("r");
let i = 0;
let a = 0;
let x = rd * 2 * Math.PI;
i = update;
a = i / 100;
let p = x * a;
jQuery(".progress").attr("stroke-dasharray", p + ", " + x);
jQuery(".progress").attr("stroke", "#0065a4");
jQuery("text").text(update + "%");
}
radialProgress(50, 'pr1');
})
.pie-wrapper{
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
}
.pie-wrapper svg {
background: #000;
border-radius: 50%;
}
.progress {
stroke-width: 50;
transform: rotate(-90deg);
transform-origin: 50% 50%;
}
.center {
fill: #ddd;
}
text {
fill: #fff;
font-family: 'Share Tech Mono';
font-size: 80px;
}
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<div class="pie-wrapper">
<svg width="300" height="300">
<circle class="progress" id="pr1" r="125" cx="150" cy="150"/>
<circle class="center" r="100" cx="150" cy="150" />
<text text-anchor="middle" x="150" y="175" />
</svg>
</div>
注意,控制蓝色进度条(50%)的是progress
圆,不是center
,黑色svg
不没有中风,它只有深灰色背景。
我正在构建一个 svg 循环进度图。
我正在尝试设置我的 svg 笔划样式以匹配 circle.center 的可见部分,但是当我更改 circle.progress 的笔划时,它不会将圆的填充缩小到足以显示黑色部分circle.progress 并匹配实际进度条的宽度。
<svg width="300" height="300">
<circle class="progress" id="progress-radial-1" r="125"/>
<circle class="center" r="140" cx="140" cy="140" />
<text text-anchor="middle" x="150" y="185" />
</svg>
这是一个fiddle:https://jsfiddle.net/BenRacicot/2kc7c56j/
这是 svg 的结果(左):
center
和 progress
圆的原点不同,应该相同(现在设置为 150)。
现在 center
的半径比 progress
小 25 像素,以适合其笔划。
因此,如果您像这样更新标记,将 center
的填充更改为 #ddd
,并将 svg
背景更改为 #000
,您将获得适合您的布局想要
<div class="pie-wrapper">
<svg width="300" height="300">
<circle class="progress" id="pr1" r="125" cx="150" cy="150"/>
<circle class="center" r="100" cx="150" cy="150" />
<text text-anchor="middle" x="150" y="175" />
</svg>
</div>
堆栈片段
window.addEventListener('load', function() {
function radialProgress(update, id){
let rd = document.getElementById(id).getAttribute("r");
let i = 0;
let a = 0;
let x = rd * 2 * Math.PI;
i = update;
a = i / 100;
let p = x * a;
jQuery(".progress").attr("stroke-dasharray", p + ", " + x);
jQuery(".progress").attr("stroke", "#0065a4");
jQuery("text").text(update + "%");
}
radialProgress(50, 'pr1');
})
.pie-wrapper{
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
}
.pie-wrapper svg {
background: #000;
border-radius: 50%;
}
.progress {
stroke-width: 50;
transform: rotate(-90deg);
transform-origin: 50% 50%;
}
.center {
fill: #ddd;
}
text {
fill: #fff;
font-family: 'Share Tech Mono';
font-size: 80px;
}
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<div class="pie-wrapper">
<svg width="300" height="300">
<circle class="progress" id="pr1" r="125" cx="150" cy="150"/>
<circle class="center" r="100" cx="150" cy="150" />
<text text-anchor="middle" x="150" y="175" />
</svg>
</div>
注意,控制蓝色进度条(50%)的是progress
圆,不是center
,黑色svg
不没有中风,它只有深灰色背景。