在关于过渡的 d3 文档中,它说这transition.select(selector)
大约相当于selection.select(selector).transition()
说子过渡版本从当前过渡继承缓动、持续时间和延迟。
我使用这两种方法的观察结果是,子转换与父转换的关系实际上必须比文档所暗示的要深一些。我所看到的是,如果我有 2 个彼此非常密切相关的过渡,我必须使用子过渡来让两个过渡完美地一起运行。
这是一个人为的例子来说明这一点(尽管这很简单,它可能不会在现实中显示问题)。假设我的 DOM 中有这个:
<g>
<circle></circle>
</g>
过渡 1 继续运行<g>
并应用“transform=translate(100,0)”来水平移动它。
过渡 2 继续运行,<circle>
并通过应用“transform=translate(-100, 0)”将其以另一种方式水平向后移动来简单地反转这一点。
预期的结果是圆圈根本不动。但我实际看到的取决于过渡是如何设置的。如果我使用配置了相同属性的 2 个单独的过渡持续时间等,我会看到圆圈似乎略有抖动。这大概是因为传递到转换插值器的中间值稍微不同步。
但是,如果我使用子转换来设置 2 个转换,它看起来很完美。
我的问题是关于过渡和子过渡之间的关系。使用单独的转换与使用子转换在时序和插值方面有什么区别?