【问题标题】:D3.js v5 making clones of selection.clonesD3.js v5 制作 selection.clone 的克隆
【发布时间】:2019-11-24 21:05:43
【问题描述】:

您好,是否可以在 D3 v5 中对选择克隆进行克隆?

我基本上是在使用选择克隆来制作和动画圆圈来模拟细菌分裂。 我可以多次调用 d3.select.clone ,但这只会对我调用 clone 的第一个圆圈进行重复克隆。我也希望能够制作克隆的克隆。

var svg = d3.select('svg')
    .style("width", '800px')
    .style("height", '600px');


  setInterval(function() {
    svg.append("circle")
            .attr("cx", 30)
            .attr("cy", 50)
            .attr("r", 15)
            .attr("id", "test_circle0")
            .style("fill", "red")

      d3.select("#test_circle0").clone(true).transition().attr("transform", "translate(25)").duration(1000);
      d3.select("#test_circle0").clone(true).transition().attr("transform", "translate(-25)").duration(3000);

  }, 1000);


【问题讨论】:

    标签: d3.js


    【解决方案1】:

    您需要将初始圆的创建放在区间之外。然后你可以在里面克隆它。

    要对克隆人自己做事情,你可以将select更改为selectAll

    var svg = d3.select('svg')
        .style("width", '800px')
        .style("height", '600px');
    
    svg.append("circle")
                .attr("cx", 300)
                .attr("cy", 50)
                .attr("r", 15)
                .attr("class", "test-circle")
    
    setInterval(function() {
        
        d3.select(".test-circle").clone(true).transition().attr("transform", "translate(25)").duration(1000);
        d3.selectAll(".test-circle").clone(true).transition().attr("transform", "translate(-25)").duration(3000);
    
      }, 1000);
    .test-circle {
        fill: red
    }
    <div class="chart"></div>
    <script src="https://d3js.org/d3.v5.min.js"  charset="utf-8"></script>
    <svg></svg>

    【讨论】:

    • 有没有办法将动画放在 d3.forceSimulation 中,这样圆圈在分割和相乘时不会重叠?
    • 您可以创建一个集群力布局并随时弹出新圈子,但让新圈子从现有圈子中“出现”可能是不可行的。老实说,您最好的选择可能是使用 p5.js 而不是 d3,并且只需接受一点数学/物理模拟开销作为您正在寻找的特定动画的可定制性成本。
    • 那么 selection.clone 是否天生就与强制布局不兼容?或者力布局的机制只会让克隆动画看起来很古怪?我想我可以研究的另一种选择是非强制布局碰撞检测,就像这里提到的那样:stackoverflow.com/questions/11339348/… ?
    猜你喜欢
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 2015-02-13
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    • 2020-10-06
    相关资源
    最近更新 更多