我在 d3.js 中完成了这个小面积图演示。
我能够为整个图表制作动画,但找不到一种方法来逐个制作动画(我希望它是一个适当的动画,而不是使用 svg-clip 的简单显示)。例如,为上面链接的页面中的圆圈设置动画的代码只是两行简单的行,为了清楚起见,我在此处将其分解:
// start frame
chart
.selectAll( 'circle' )
.data( data )
.enter()
.append( 'circle' )
.attr( 'cx', function( d, i ) { return x( i ); })
.attr( 'cy', y( 0 ) )
.attr( 'class', 'point' ).attr( 'r', 5 );
// end frame
chart
.selectAll( 'circle' )
.data( data )
.transition()
.duration( 3000 )
.attr( 'cx', function( d, i ) { return x( i ); })
.attr( 'cy', function( d, i ) { return y( d ); });
这里的问题是所有的圈子都是同时开始和结束的。面积图的各个部分也是如此。那么如何一个接一个地移动它们呢?一种方法是使用d3的delay
功能;我不确定如何对面积图的路径段执行此操作,但对于标记数据点的圆圈,它会是这样的:
// start frame
chart
.selectAll( 'circle' )
.data( data )
.enter()
.append( 'circle' )
.attr( 'cx', function( d, i ) { return x( i ); })
.attr( 'cy', y( 0 ) )
.attr( 'class', 'point' ).attr( 'r', 5 );
// end frame
chart
.selectAll( 'circle' )
.data( data )
.transition()
.delay( 1000 * c )
.duration( 3000 )
.attr( 'cx', function( d, i ) { return x( i ); })
.attr( 'cy', function( d, i ) { return y( d ); });
但要做到这一点,我需要c
一个接一个地链接到各个圆圈的句柄,就像在一个循环中一样。
所以我的问题是:
我如何获得
c
选择的单个元素的句柄,用于圆圈和区域(svg.area())图表?有没有比我的
delay
方法更简单的方法来实现这一点?