【发布时间】:2013-03-23 14:52:43
【问题描述】:
我一直在努力解决与 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 个更新的数据点延长线。
【问题讨论】:
标签: d3.js transitions