我一直在努力解决与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