我想要达到的结果是:
到目前为止,我所取得的成就是:
我搞不懂的是:
- 如何使半圆中的线条的拐角变圆
- 如何在填充的半圆的末端添加垂直线
有人能帮帮忙吗?
完整的代码如下:
function App() {
return <SemiCircleProgress percentage={70} />;
}
function SemiCircleProgress({ percentage }) {
const strokeWidth = 25;
const background = "#D9D9D9";
const diameter = 400;
const coordinateForCircle = diameter / 2;
const radius = (diameter - 2 * strokeWidth) / 2;
const circumference = Math.PI * radius;
const semiCirclePercentage = percentage * (circumference / 100);
return (
<div className="semicircle-container">
<svg
width={diameter}
height={diameter / 2}
style={{ transform: "rotateY(180deg)", overflow: "hidden" }}
>
<linearGradient id="gradient">
<stop offset="0%" stopColor="#B8F1C6" />
<stop offset="100%" stopColor="#EBF8A1" />
</linearGradient>
<circle
cx={coordinateForCircle}
cy={coordinateForCircle}
r={radius}
fill="none"
stroke={background}
strokeWidth={8}
strokeDasharray={circumference}
style={{
strokeDashoffset: circumference
}}
/>
<circle
cx={coordinateForCircle}
cy={coordinateForCircle}
r={radius}
fill="none"
stroke="url(#gradient)"
strokeWidth={strokeWidth}
strokeDasharray={circumference}
style={{
strokeDashoffset: semiCirclePercentage,
transition:
"stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s"
}}
/>
</svg>
</div>
);
}
ReactDOM.render( < App / > , document.getElementById("root"));
body {
background: #292929;
}
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<div id="root"></div>