【发布时间】:2022-01-10 17:37:35
【问题描述】:
我用 d3 创建了一个条形图,它从数组中提取条形大小。 所以我试图用一个函数交换器在相邻条之间移动动画,它有效,但只有一次。酒吧在第一次通话时交换位置,但会忽略第二次通话。我认为问题在于第二次调用函数是在第一次转换完成之前执行的。如何拨打第二个电话以等待第一个电话完成?
const data = utils.generateRandomArray(25,45);
const width = "500px";
const height = "300px";
const graph1 = d3.select("#graph1").append("svg")
.attr("height", height)
.attr("width", width)
.attr("style", "border: 1px solid black");
utils.renderGraph(graph1, data);
utils.renderGraph(graph2, data);
const bar1 = graph1.select(".bar-1");
const bar2 = graph1.select(".bar-2");
const bar3 = graph1.select(".bar-3");
const bar4 = graph1.select(".bar-4");
function swapper(bar1,bar2){
bar1.transition()
.delay(1000)
.duration(2000)
.attr("x", `${bar2.attr("x")}`);
bar2.transition()
.delay(1000)
.duration(2000)
.attr("x", `${bar1.attr("x")}`);
}
swapper(bar1,bar2);
swapper(bar1,bar2);
【问题讨论】:
-
你可以给你的过渡添加一个名字来阻止它们互相踩踏 - bar1.transition("firstone") 和 bar2.transition("secondone")
标签: javascript d3.js