我一直在努力解決與D3中的轉換有關的問題。考慮以下代碼:在D3中擴展路徑並轉換
svg.selectAll("path")
.data(data, key)
.enter().append("path")
.attr("d", someFunctionThatReturnsAPath);
});
我呼籲在setTimeout
幾秒鐘後以下:
svg.selectAll("path")
.transition()
.duration(2000)
.attr("d", someFunctionThatReturnsADifferentPath);
});
第二次調用正確更新的路徑,但不設置過渡動畫效果。爲什麼在d
屬性在第二次調用中更新時沒有轉換?
請注意,路徑非常複雜。在這兩個調用中,在實際繪製路徑之前存在明顯的延遲。也許這與缺乏轉型有關?
我是D3的新手,但我已經閱讀過渡,並且似乎無法理解爲什麼這不像我所期望的那樣行事。
更新
每@ Marjancek的回答,我提供有關這兩個調用的函數的更多細節。
這裏是someFunctionThatReturnsAPath
定義:
function(d) {
var coordinates = [];
for (var i = d.track.length - 1; i >= 0; i--) {
// We only care about the last 10 elements
if (coordinates.length >= 10)
break;
coordinates.push(d.track[i]);
}
return path({type: "LineString", coordinates: coordinates});
};
而且someFunctionThatReturnsADifferentPath
:
function(d) {
var coordinates = [];
for (var i = d.track.length - 1; i >= 0; i--) {
// We only care about the last 20 elements
if (coordinates.length >= 20)
break;
coordinates.push(d.track[i]);
}
return path({type: "LineString", coordinates: coordinates});
};
其中路徑被定義如下(projection
是d3.geo.albersUsa()
):
var path = d3.geo.path()
.projection(projection);
的目標是在第二次呼叫時,該線路將擴展10個較新的數據點。
太好了,謝謝你的指針。 GitHub早些時候倒閉了,這可能是bl.ocks.org崩潰的原因。你現在有沒有鏈接? – 2013-03-24 00:46:40
我添加了答案的鏈接 – 2013-03-24 01:37:14