【发布时间】:2014-11-05 15:02:12
【问题描述】:
我正在尝试使用以下代码为力布局有向图上的链接设置动画。链接是简单的线条而不是路径。我按下按钮启动动画。样式更改(在 onTick 中)会立即发生,但问题是动画本身需要大约 10 秒才能开始。难道我做错了什么?我可以加快动画的开始吗?不得不说,一旦动画开始,动画就运行得非常好。
function animLink( d )
{
this.transition()
.delay(0)
.duration(10000)
.ease( "linear" )
.attrTween( "stroke-dashoffset", function() {
var i = d3.interpolateString( "1000", "0" );
return function(t) { return i(t); };
} )
.each( "end", function() { d3.select(this).call(animLink); } );
}
onTick = function(e)
{
if (buttonPressed)
link
.style( "stroke-dasharray", "10,10" )
.call( animLink );
}
您可以在此处查看jsfiddle。即使我指定 .delay(0),一开始也会有 5 秒的延迟。
与我的 2000 个节点相比,小提琴中的图表非常小。
【问题讨论】:
-
我认为你需要
.each(animLink)而不是.call(animLink)。 -
实际上这让情况变得更糟。所有节点都在 (0,0) 处结束,动画根本没有开始。
-
好的,你能提供一个完整的例子吗?
link是什么,onTick在哪里调用? -
用小提琴更新了问题。
-
不要在 tick 处理程序中调用它,它会为力布局的每次迭代创建一个新的过渡 jsfiddle.net/ykshg1uf/1
标签: javascript animation d3.js svg-animate