【发布时间】:2018-06-29 07:10:47
【问题描述】:
我想对不同的元素进行链式过渡。在整个程序中,我想运行一系列转换。在元素 x 的第一次转换完成后,我想从元素 y 的转换开始,依此类推。过渡的持续时间应有所不同。
“解决”它的一种方法是根据先前转换的持续时间总和延迟所有后面的转换。但这很丑陋,因为它非常混乱且不准确。
这是我尝试完成的一个示例:
<!DOCTYPE html>
<meta charset="utf-8">
<head>
<script src="https://d3js.org/d3.v4.js"></script>
</head>
<body>
<script>
let sel = d3.select("body")
let selFirst = sel.append("h1").attr("class", "first").text("first");
let selSecond = sel.append("h2").attr("class", "second").text("second");
let selThird = sel.append("h3").attr("class", "third").text("third");
let trans = d3.transition("body");
let firstTrans = trans.each(function() {selFirst.transition().style("opacity", 0).transition().style("opacity",1); })
let secondTrans = firstTrans.each(function() {selSecond.transition().style("opacity", 0).transition().style("opacity",1); })
let thirdTrans = secondTrans.each(function() {selThird.transition().style("opacity", 0).transition().style("opacity",1); })
</script>
</body>
</html>
【问题讨论】:
-
假设持续时间相同,我用一个非常简单的解决方案写了一个答案。如果不是这样,请告诉我,我会删除它。
-
哇,你的方法非常优雅,我不知道延迟函数中的第二个参数。但事实上,我需要不同的过渡持续时间。很抱歉没有在问题中解决它 - 我会编辑它
-
好的,我刚刚删除了我的答案。
-
另外,由于简单的 d3.selectAll() 可能无法掌握不同的元素...我希望看到一个通用的解决方案。所以我的猜测是,您必须通过选择适当的根元素(如此处的主体)来引用它们,然后向下导航到函数中的相应元素。抱歉,不清楚。
-
你可以给他们一个通用的类。
标签: javascript d3.js