0
我使用d3.js
創建pie
圖表。我想用動畫創建3個帶有單個svg
元素的派。製作不同大小的「半徑」以創建「弧形」不起作用
這對我來說工作得很好。但是,創建不同的我每次使用循環減少radius
。但radius
沒有得到改變。 如何解決這個問題?
我的代碼(樣品):
var array1 = [
0,200
]
window.onload = function() {
var width = 660,
height = 200,
radius = Math.min(width, height)/2;
var color = d3.scale.category20();
var arc = null;
var pie = d3.layout.pie()
.value(function(d) {
return d; })
.sort(null);
function tweenPie(finish) {
var start = {
startAngle: 0,
endAngle: 0
};
var i = d3.interpolate(start, finish);
return function(d) { return arc(i(d)); };
}
var svg1 = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
for(var i = 0; i < 3; i++) {
arc = d3.svg.arc()
.innerRadius(radius - (5*i)) //each time size differs
.outerRadius(radius - (6)*i); //each time size differs
svg1.append('g')
.attr("transform", "translate(" + width/2 + "," + height/2 + ")")
.datum(array1).selectAll("path")
.data(pie)
.enter().append("path")
.attr("fill", function(d, i) { return color(i); })
.transition()
.duration(5000)
.attrTween('d', tweenPie)
}
}
你能看看這裏嗎?而不是獲得多個弧,我只得到一個http://jsfiddle.net/Qh9X5/7458/ – 3gwebtrain
在這個jsfiddle的例子中,你正在創建一個單獨的弧對象。在最初的繪製過程中,每當渲染每個值時都會更改內部和外部半徑。但是這些補間方法正在使內半徑和外半徑保持不變。因此,所有補間方法都使用具有最後一個餅圖的內半徑和外半徑的相同弧對象。 –
那麼,完成它的正確方法是什麼?你能幫我解決這個問題嗎? – 3gwebtrain