【问题标题】:Setting the circle radius in d3js with a dynamic variable使用动态变量在d3js中设置圆半径
【发布时间】:2014-04-24 10:36:26
【问题描述】:

我在 searchButton 函数中有一组数据,它调用数组中的不同数字,如下所示:values[80,20,10] 然后在我的 x 变量中,我有这个 d3js 的比例。

x = d3.scale.linear()
.domain([0, d3.max(values)])
.range([0, width]);

现在我有一个名为 grow 的函数,在其中我根据 searchbutton 函数中的值生成一组圆圈。

this.grow = grow;
function grow(size) {
  circle.attr("r",size / 5 + 10).transition().duration(2000);
}

当我使用 size 作为参数设置增长函数时,它会增长但转换根本不起作用。

【问题讨论】:

    标签: javascript arrays d3.js


    【解决方案1】:

    为了使d3 转换起作用,您需要将属性从默认值开始设置为所需值。我会做什么如下:

    this.grow = grow;
    
    function grow(size) {
         circle
               .attr('r', 0)
               .transition()
               .ease('linear')
               //.ease('cubic-in-out') // default
               .duration(2000)
               .attr('r', size / 5 + 10);
    }
    

    这将使一个从 0 半径到所需半径的圆动画。您可能需要调整您的逻辑,也许您不希望默认半径(过渡前)值为 0。

    您可以发fiddle 或发布您的整个代码吗?你是怎么调用grow函数的?

    【讨论】:

    • 首先感谢您的快速回复,非常感谢。我在 searchButton() 中调用了增长函数,就像这个 ball1.grow(x(values[0]))。所以我希望当我按下那个按钮时它会增长。对小提琴不太了解,但会发现。
    • 你是如何定义圆变量的?如果您可以在此 site 上创建一个示例,那将非常有帮助。像这样example.
    • 所有这些函数都在一个更大的函数中,圆的定义是这样的 var circle = svg.append("circle") .attr("r", 13) .style("fill", color) .style("stroke", color) 13 是我的起始半径。
    • 我将尝试这样做,请稍等。