摆脱SVG圆形元素上的锯齿

Ant*_*ard 8 html javascript css jquery svg

我正在制作动画SVG饼图.基本上我有两个SVG元件,所述第一获取一个border-radius50%,第二个是,我填充到一个特定的值的圆.最后,这使得一个圆圈位于另一个圆圈之上,它们都具有相同的尺寸.

有一种似乎很难摆脱的SVG别名.它在圆圈的顶部,左侧,底部和右侧"角落​​"非常明显,至少在Google Chrome上是如此.

这是HTML部分

<figure id="pie" data-percentage="60">
  <div class="receiver"></div>
  <svg width="200" height="200" class="chart" shape-rendering="geometricPrecision">
    <circle r="50" cx="100" cy="100" class="pie" shape-rendering="geometricPrecision"/>
  </svg>
</figure>
Run Code Online (Sandbox Code Playgroud)

这是我的codepen,可以更准确地描述问题.我尝试了各种解决方案,包括形状渲染SVG属性但无济于事.

这是一个截图,别名不像在codepen中那样可见(对我来说至少)

在此输入图像描述

Per*_*ijn 2

完整的 svg 百分比圆

我之前也遇到过这个问题:Pixel Edge on Circle 当您修改具有边框半径的元素时会发生这种情况。
你可以在上面链接的答案中寻找答案,但我认为如果你只使用/修改 svg,它的性能和美观都会更好。

例子:

var circ = document.getElementsByClassName("pie2");
var text = document.getElementsByClassName("text");
text = text[0];
circ = circ[0];
var maxvalue = 320;
var value = maxvalue;
var stop = false;

function increase() {
  if (value > 0) {
    circ.style.strokeDashoffset = value--;
    text.textContent = Math.abs(Math.floor((value / maxvalue) * 100) - 100) + "%";
  } else {
    clearInterval(intervalid);
  }
}

var intervalid = setInterval(increase, 25);
Run Code Online (Sandbox Code Playgroud)
.pie {
  fill: none;
  stroke: #222;
  stroke-width: 99;
}
.pie2 {
  fill: none;
  stroke: orange;
  stroke-width: 100;
  stroke-dasharray: 320;
  stroke-dashoffset: 320;
}
.text {
  font-family: Arial;
  font-weight: bold;
  font-size: 2em;
}
Run Code Online (Sandbox Code Playgroud)
<figure id="pie" data-percentage="90">
  <svg width="200" height="200" class="chart" shape-rendering="geometricPrecision">
    <circle r="50" cx="100" cy="100" class="pie" shape-rendering="geometricPrecision" />
    <circle r="50" cx="100" cy="100" class="pie2" />
    <text class="text" x="80" y="110">0%</text>
  </svg>
</figure>
Run Code Online (Sandbox Code Playgroud)