SVG <circle>填充覆盖前一个圆圈

时间:2017-06-05 15:35:33

标签: css css3 svg fill

我正在构建一个svg循环进度图。

我正在设法调整svg的笔触以匹配circle.center的可见部分,但是当我更改circle.progress的笔划时,它不会缩小圆圈的填充,足以显示circle.progress和match的黑色部分实际进度条的宽度。

<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>

这是一个小提琴:https://jsfiddle.net/BenRacicot/2kc7c56j/

这是svg的结果(左): enter image description here 我试图在右边得到结果。正如您所看到的,控制蓝色进度条的圆形中心(50%)也有一个填充图像中的白色(小提琴中的灰色)并且覆盖黑色svg笔划太多。我需要那个笔画与蓝色的宽度相同。

1 个答案:

答案 0 :(得分:1)

centerprogress圈子的来源不同,应该相同(现在设置为150)。

center现在的半径比progress小25 px,以适应其中风。

因此,如果您更新这样的标记,请将center的填充更改为#ddd,并将svg背景更改为#000,您将获得所需的布局< / p>

<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>

Updated fiddle

Stack snippet

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>

注意,progress圈控制蓝色进度条(50%),而不是center,黑色svg没有中风,它只有一个深灰色的背景。