您描述的問題有點複雜,因爲在D3中,您首先必須在固定位置處添加一個對象,然後才能將其從原始位置移動到另一個位置。
在你的例子中,我會根據以前的值計算新的(中間)初始位置,然後用真實的最終值再次更新圖表。這將創建一個從一開始就很好的路徑動畫到最終位置:
updateGraph([
[...].concat(computeLatestIntermediates()),
[...].concat(getLatestTimes())
]);
updateGraph([
[...].concat(getRealValues()),
[...].concat(getLatestTimes())
]);
另外,您可以設置初始值0
。這將創建一個從底部漂亮的動畫目標值:
updateGraph([
[..., 0, 0, 0, 0],
[...,10,12,13,14]
]);
updateGraph([
[..., 234, 245, 210, 170],
[..., 10, 12, 13, 14]
]);
BTW:當動畫線圖,你通常有幾個其他的問題。其中一些在邁克的path animation page上覆蓋。還有一個相關的問題here。
編輯(聰明的解決方案):你的繪圖函數中
而不是調用更新功能的兩倍,你可以實現這兩步衝這樣的:
function getPathData(d,i) { return "M 0,0 ... L n,n"; }
function getInitalTransform(d,i) { return "translate(...)"; }
function getFinalTransform(d,i) { return "translate(...)"; }
path
.attr("d", getPathData)
.attr("transform", getInitalTransform)
.transition()
.ease("linear")
.attr("transform", getFinalTransform);