我正在尝试使用多阶段动画进行可视化。这是一个人为的小提琴,说明了我的问题(下面的代码)。
在此可视化中,当整个组完成移动到右列时,每行中的框应变为绿色。IOW,当第一行(包含 3 个框)完全位于右列时,所有框应从黑色变为绿色,但此时仅部分移动到右列的第二行将保持黑色,直到它,也完全在右栏中。
我很难设计这种过渡。
一旦完成移动,基本链接立即将每个框变为绿色(这就是它目前的工作方式)。还不够好。
另一方面,为链创建延迟是困难的,因为每组的有效延迟是基于它拥有的盒子的数量,我认为这个计数对我来说是不可用的。
就像我需要在混合粒度级别上进行转换。
我该怎么做呢?
小提琴(下面的代码)
var data = [
["x", "y", "z"],
["a", "b", "c", "d", "e"]
];
var svg = d3.select("svg");
var group = svg.selectAll("g").data(data)
.enter()
.append("g")
.attr("transform", function(d, i) {
return "translate(0, " + (40 * i) + ")";
});
var box = group.selectAll("rect")
.data(function(d) { return d; });
box.enter()
.append("rect")
.attr("width", 30)
.attr("height", 30)
.attr("x", function(d, i) { return 60 + 30 * i; })
.transition()
.delay(function(d, i) { return 250 + 500 * i; })
.attr("x", function(d, i) { return 300 + 30 * i; })
.transition()
.attr("style", "fill:green");
// I probably need a delay here but it'd be based off the
// number of elements in the nested data and I don't know
// how to get that count
.attr("style", "fill:green");