【发布时间】:2018-01-17 01:35:44
【问题描述】:
我正在尝试使用 vanilla JS 创建一个 svg 圆环图。我能够为填充描边设置动画,尽管我想要一个从中心开始并到圆周以与甜甜圈的值一起动画的指针。我可以编写一个函数来绘制指针,但无法想出一些动画。
我的 JS 是这样的:
var svgCircle = document.querySelector('.progress');
var progressValue = document.querySelector('.progress__value');
var RADIUS = 108;
var CIRCUMFERENCE = 2 * Math.PI * RADIUS;
function progress(value) {
var progress = value / 100;
var dashoffset = CIRCUMFERENCE * (1 - progress);
var innerCircle = drawInnerCircle();
var handOfTheKing = drawHand(value);
progressValue.style.strokeDashoffset = dashoffset;
svgCircle.appendChild(handOfTheKing);
svgCircle.appendChild(innerCircle);
}
function drawInnerCircle () {
var innerCircle = document.createElementNS('http://www.w3.org/2000/svg','circle');
innerCircle.setAttribute("id", "innerCircle");
innerCircle.setAttribute("cx", "120");
innerCircle.setAttribute("cy", "120");
innerCircle.setAttribute("r", '10');
innerCircle.setAttribute("stroke-width", '1');
innerCircle.setAttribute("stroke", '#000');
innerCircle.setAttribute("fill", '#fff');
return innerCircle;
}
function drawHand(per) {
var anglePartition = 2*Math.PI/100;
var percentageWithOffset = per;
var x = 120 + (120 * Math.cos(anglePartition * percentageWithOffset));
var y = 120 + 120 * Math.sin(anglePartition * percentageWithOffset);
var clockHand = document.createElementNS('http://www.w3.org/2000/svg','path');
clockHand.setAttribute("id", "clockHand");
clockHand.setAttribute("d", "M 120 120 L" + x + " " + y);
clockHand.setAttribute("stroke", "black");
clockHand.setAttribute("stroke-width", '1');
return clockHand;
}
有人可以帮忙吗? TIA
编辑: 我需要动画箭头手的帮助,而不是甜甜圈填充笔划。
【问题讨论】:
-
SVG circle animation的可能重复
-
不。我正在尝试为半径箭头设置动画。 stackoverflow.com/questions/26178095/svg-circle-animation 处理我已经完成的圆形填充描边动画。不过感谢您的链接:)
标签: javascript css animation svg donut-chart