我想使用过渡,幸运的是Bostock举了一个例子,可以在自己的图表中使用。
问题是我不完全了解语法,也不知道是我无法弄清的某些Javascript还是D3.js的方法链接中的某些东西:

原始示例:
https://bl.ocks.org/mbostock/3885705

我使用的部分:

var transition = svg.transition().duration(750),
        delay = function(d, i) { return i * 50; };


我的使用方式(我将延迟函数略微修改为“ delayF”,以便我自己可以更轻松地了解是什么):

var transition = myChart.transition().duration(750),
    delayF = function(d, i) { return i * 50; };

transition.selectAll("circle")
    .delay(delayF)
    .attr("cx", function(d) {
     return xScale(d.endedA); })
    .attr("cy", function (d)
    {
        return yScale(d["Duration (min)"]);
    })


我不明白的是

...duration(750),
            delay = function(d, i) { return i * 50; };


他在哪里以某种方式将函数链接到其他方法,或者应该如何表达它。

我尝试对其进行修改,以查看是否可以更好地理解它,并且这样做有效(将delayF函数放置在delay方法中):

var transition = myChart.transition().duration(750);

        transition.selectAll("circle")
            .delay(function(d, i) { return i * 50; })
            .attr("cx", function(d) {
             return xScale(d.endedA); })
            .attr("cy", function (d)
            {
                return yScale(d["Duration (min)"]);
            })


但是,这不是(delayF作为它自己的函数,没有它和以前的方法之间的逗号:

var transition = myChart.transition().duration(750);
        delayF = function(d, i) { return i * 50; };

        console.log(delayF);

    transition.selectAll("circle")
        .delay(delayF)
        .attr("cx", function(d) {
         return xScale(d.endedA); })
        .attr("cy", function (d)
        {
            return yScale(d["Duration (min)"]);
        })


(错误:delayF未定义)

显然,如果将数据用逗号链接到转换变量时,数据最终会从某种程度上丢失,但是“如何”是我所不了解的。

最佳答案

首先,这:

var transition = myChart.transition().duration(750),
delayF = function(d, i) { return i * 50; };


与以下内容相同:

var transition = myChart.transition().duration(750);
var delayF = function(d, i) { return i * 50; };


因此,这只是一个组合的var语句,这里没有新内容。

除此之外,当您说“但是这没用”时...

var transition = svg.transition().duration(750);
delayF = function(d, i) { return i * 50; };


...您可能在其他地方犯了另一个错误,因为它起作用了:唯一的区别是现在delayF是全局的。

这是修改后的bl.ocks,表明它可以正常工作,请查看第122行:https://bl.ocks.org/anonymous/41f9beb431956ee825fb0417c497caec

我的猜测是,您得到了该错误(delayF is not defined),因为您忘记了在轴过渡中进一步将delay更改为delayF

09-25 16:08