整天煎熬我的大脑。最后决定问这里。 我试图在d3.js的弧的末尾附加一个文本。我尝试使用arc.cenriod(),但它将文本保持在弧的中心。我想在弧的末尾显示文本。
var pi = Math.PI, width=600, height=400; var iR=150; var oR=110;
startAngle = 90, endAngle = 270, innerRad=150 , outerRad=110 ;
var new_color, hold; var max = 300, min = 0, current = 0;
var cur_color = 'limegreen';
var firstValue = 100;
var arc = d3.svg.arc().innerRadius(iR).outerRadius(oR).startAngle(-120 * (pi/180));
var svg = d3.select("body")
.append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(" + width / 2 + "," + height / 2 + ")")
var nScale = d3.scale.linear()
.range([0, 240])
.domain([0,300]);
var current = svg.append("text").attr("transform", "translate(0,"+ (iR/2) +")")
.attr("text-anchor", "middle").style("font-size", "50").style("font-family", "Helvetica").text(current)
var background = svg.append("path").datum({endAngle: 120 * (pi/180)}).style("fill", "none").attr("d", arc);
setInterval(function() {
var dataRead =Math.random()*300 ;
var num = nScale(dataRead);
var numPi = Math.floor(num - 119) * (pi/180);
current.transition().text(Math.floor(dataRead));
background
.transition()
.duration(1000)
.style("fill", "limegreen").call(arcTween, numPi);
}, 2000);
function arcTween(transition, newAngle) {
transition.attrTween("d", function(d) {
var interpolate = d3.interpolate(d.endAngle, newAngle);
return function(t) {
d.endAngle = interpolate(t);
; return arc(d);
};
});
}
这是我上面代码的jsfiddle。 http://jsfiddle.net/chaitugoli/duo29t5k/
我希望当前(文本元素)与尖端的弧一起移动。 我怎样才能得到弧线结束的坐标。
请告诉我。任何建议都会有帮助 (如果您在js小提琴中看不到任何内容,可能是d3导入的问题。如果您愿意,请在您的本地系统上尝试)
谢谢
答案 0 :(得分:3)
我会直接解析路径并从中获取信息:
function arcTween(transition, newAngle) {
transition.attrTween("d", function(d) {
var interpolate = d3.interpolate(d.endAngle, newAngle);
return function(t) {
d.endAngle = interpolate(t);
var path = arc(d);
var coords = path.split("L")[1].split("A")[0]; //<-- this is the position of the end of the line connecting the two arcs
current.attr('transform', 'translate(' + coords + ')' + 'rotate(' + (d.endAngle * 180/Math.PI) + ')'); //<-- position text and rotate it
return path;
};
});
}
更新了fiddle。