Я пытаюсь запустить анимацию по порядку.Вот пример.
function rect1() {
d3.select("svg")
.append("rect")
.attr("id", "r1")
.attr("x", 300)
.attr("y", 100)
.attr("height", 0)
.attr("width", 0)
.transition()
.duration(1000)
.attr("height", 30)
.attr("width", 50);
}
function rect2() {
d3.select("svg")
.append("rect")
.attr("id", "r2")
.attr("x", 300)
.attr("y", 50)
.attr("height", 0)
.attr("width", 0)
.transition()
.duration(1000)
.attr("height", 30)
.attr("width", 50);
}
function highlightRect(id) {
d3.select(id)
.style("fill", "yellow")
}
Итак, я хочу создать такую функцию, чтобы я мог запускать их в порядке rect1()
, rect2()
, highlightRect()
одна за другой (после окончания каждой анимации).
function startAnim (f1, f2, f3, f3a) {
f1();
f2();
f3(f3a);
}
startAnim(rect1, rect2, highlightRect, "#r1");
Я пробовал что-то подобное, но это становится грязным, когда есть больше анимаций.
// rect1
d3.select("svg")
.append("rect")
.attr("id", "r1")
.attr("x", 300)
.attr("y", 100)
.attr("height", 0)
.attr("width", 0)
.transition()
.duration(1000)
.attr("height", 30)
.attr("width", 50)
.on("end", () => {
// rect2
d3.select("svg")
.append("rect")
.attr("id", "r2")
.attr("x", 300)
.attr("y", 50)
.attr("height", 0)
.attr("width", 0)
.transition()
.duration(1000)
.attr("height", 30)
.attr("width", 50)
.on("end", ....);
});;
Может быть, неосведомленный вопрос, может ли это быть сделано с обещаниями?
Спасибо