html,body,svg { height:100% }
by imys
HTML
<svg width="500px" height="500px" version="1.1" xmlns="http://www.w3.org/2000/svg">
<path transform="translate(150, 150)" fill="none"
stroke-linecap="round" stroke="#999"
stroke-width="13"
d="M 0 -100 A 100 100 0 1 1 -0.00 -100"
id="ring"
/>
</svg>
CSS
html,body,svg { height:100% }
JavaScript
var path = document.getElementById('ring');
var r=100;
var progress=0.8;
//将path平移到我们需要的坐标位置
ring.setAttribute('transform', 'translate('+r+','+r+')');
// 计算当前的进度对应的角度值
var degrees = progress * 360;
// 计算当前角度对应的弧度值
var rad = degrees* (Math.PI / 180);
//极坐标转换成直角坐标
var x = (Math.sin(rad) * r).toFixed(2);
var y = -(Math.cos(rad) * r).toFixed(2);
//大于180度时候画大角度弧,小于180度的画小角度弧,(deg > 180) ? 1 : 0
var lenghty = window.Number(degrees > 180);
//path 属性
var descriptions = ['M', 0, -r, 'A', r, r, 0, lenghty, 1, x, y];
// 给path 设置属性
path.setAttribute('d', descriptions.join(' '));