我正在尝试创建一个非常简单的甜甜圈图表。
以下是工作代码:
const countries = [
{'percent': 2,colour: 'red'},
{'percent': 28,colour: 'blue'},
{'percent': 36,colour: 'yellow'},
{'percent': 34,colour: 'orange'}
];
const donutData = countries.map((country, index) => {
return {
stroke: country.colour,
dashoffset: 25 - countries.slice(0, index).reduce((a, b) => a + b.percent, 0),
dashArray: [country.percent, 100 - country.percent]
}
});
const div = document.createElement('div');
div.innerHTML = '<svg id="donut" width="100%" height="100%" viewBox="3 3 36 36"></svg>';
document.body.appendChild(div);
document.querySelector('#donut').innerHTML= donutData.reduce((a, item) => {
return a +
`<circle
cx="21"
cy="21"
fill="transparent"
r="15.91549430918954"
stroke-width="2.3"
stroke="${item.stroke}"
stroke-dasharray="${item.dashArray[0]} ${item.dashArray[1]}"
stroke-dashoffset="${item.dashoffset}"></circle>
`;
}, '')
这里的代码是正常运行的,但如果你尝试将stroke-linecap="round"
添加到<circle>
中,它就会变得很乱,描边会叠在一起。
你可以在这里看到。
我能理解这个问题,但不知道如何在描边之间添加一点间距以避免丑陋的叠放。
欢迎任何建议。
dashArray
中)中减去一小部分百分比:https://jsfiddle.net/3L728bmq/ - Shiderszcountries
数组的末尾添加 {'percent': 0,colour: 'red'}。虽然结果可能更美观,但我不会这样做。对于图表,我会保留stroke-linecap="butt"
。图表是视觉工具,使用stroke-linecap="round"
可能会改变数据的感知。 - enxaneta