【发布时间】:2013-12-10 15:12:51
【问题描述】:
我有一个转换绘图点的 D3 图表。有时我希望这些是动画过渡,有时我希望它们是瞬时的。在 D3 中是否有一种 DRY 方式来做这种事情?
例如:
svg.selectAll('g.data-point')
.data(dataset)
.transition()
.duration(transitionTime)
.attr({
class: function(d) {
return getClassesForPoint(d);
},
transform: function(d) {
return ('translate(' + ((d.x) ? xScale(d.x) : xScale(0)) + ', ' + yScale(d.y) + ')');
}
});
如果我只想根据条件进行动画转换,我是否需要通过 if-else 结构重复该块而不需要第 3-4 行,或者有更好的方法吗?链接让我有点失望。我已经尝试将其持续时间设为 0,但它仍会通过动画引擎。
有什么想法吗?
编辑:
原来我的选择器已经失效,正如 Lars 所说,使用 duration(0) 可以正常工作。但是,我曾多次遇到过这种情况,似乎两条链中有足够的共性,但我不知道如何正确或动态地添加/删除对链的调用。
【问题讨论】:
-
我不确定我是否理解您对使用
duration(0)的担忧——它应该给您带来与没有过渡相同的行为,不是吗? -
@LarsKotthoff 从技术上讲这是不正确的 - 外观将是相同的,但是它将代码转换为异步的。这通常没问题,但测试时有点痛苦。
标签: javascript animation d3.js