我想使用过渡,幸运的是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
。