d3过渡首先删除

时间:2014-10-01 08:09:03

标签: javascript d3.js coffeescript

如果我以删除第一个元素的方式更新我的数据(例如,对于列表中的第一个元素过小的半径圆圈列表,我希望第一个元素缩小,剩下的两个元素为留下来。相反,第三个缩小,第一个滑到第二个位置,第二个滑入第三个位置。我做错了什么?

用于渲染我圈子的代码是:

update = (data) ->
    circle = svg.selectAll('circle').data data

    circle.enter().append('circle')
        .attr('r', 0)

    circle
      .transition().duration(250)
        .attr('r', (d) -> d.r)
        .attr('cx', (d) -> d.x)
        .attr('cy', (d) -> d.y)


    circle.exit()
      .transition().duration(250)
        .attr('r', 0)
        .remove()

小提琴: http://jsfiddle.net/ztf6spL8/

1 个答案:

答案 0 :(得分:0)

问题是数据匹配 - 默认情况下,D3根据索引进行匹配。您正在根据半径进行过滤,因此您可能希望匹配:

circle = svg.selectAll('circle').data data, ((d) -> d.r)

完整示例here