实现并行(即同步/同时/并发)交错和链接d3转换的策略?

时间:2014-09-28 22:12:19

标签: javascript d3.js transitions

这个问题建立在this回答中现在描述的以前相当谨慎记录的行为的基础上。

背景

有很多情况下d3过渡操作混合静态和动态DOM元素。

这里,静态我指的是(或多或少)管理svg:svg容器的生命周期中存在的那些元素,并且通过动态,我指的是在每个转换周期中创建和删除的元素。

单个静态元素通常受链式转换的影响,每个新的转换扩充前一个,元素或转换被分配给单个长寿命变量。

动态元素通常受交错转换的影响,每个元素或转换都分配给离散的,本地的和短期的变量。

无论是链接,交错还是混合,其中离散转换同时存在,它们似乎相互干扰,表明某些d3.transition()内部状态最终被共享,或者(否则) put)在给定时间只能存在一个转换。

我对消除此类干扰的策略感兴趣,挑战在于 - 根据根的性质或控制转换,链式转换可能来自交错转换值和(不太可能?)反之亦然

问题

在我看来,任何此类离散但并发的转换可能必须在完全独立的范围内维护。问题:

1)可以多个离散转换同时共存?

2)通过仔细确定范围,他们是否可以<强烈>强迫共存?

3)如果是,怎么样?我希望与这个用例相匹配的 d3-native pattern

从理论到实践

这只是为了给上面一点上下文。

如果this复合动画中的圆圈是静态的并且线条是动态的,那么它将非常接近我试图描述的情况。

在我的情况下,根过渡一直被固定为交错,现在很多都取决于它。更多地反映了D3文档的状态而不是有意识的设计决策,现在改变的时间有点晚。

我特别困难的是使用填充和/或笔触属性临时突出显示这些圆圈。实际上,我在本地将交错转换为链式转换。

  • 首先(并根据单独的标准)从可能的预先存在的圆圈的固定池中选择少量圆圈。 (为了论证,这可以想象 - 而实际上每次只选择相同的两个圆圈)。的确定

  • 管理交错转换用于协调所选圈子之间(动态)线条的绘制。的确定

  • 然后使用派生的链式转换来突出显示所选的(静态)圆圈。的 FAIL

根据我如何尝试使用控制交错转换值来扩充链式转换,引入任何第二个,并发延迟()或持续时间()调用的瞬间,我将获得以下形式的控制台错误奖励:

transition.delay is not a function
transition.duration is not a function
node.__transition__[id] is undefined

在这种情况下,另一个重点:我在函数调用中接收交错转换,即通过引用传递。这一直到现在允许我使用继承的过渡值本地,如:

selection
.transition() // <-- delay and duration as established *outside* the calling function
.call(do_something_cute)
.transition()
.delay()
.duration()
.call(do_something_cool)

似乎是继承的行为,任何并行,链式转换的尝试都令人不安。

虽然我的第一个倾向是将链式过渡和它所作用的静态元素包裹在一个闭合中,但我现在还不确定这是否足以使它免受更广泛的交错过渡范围的影响。我担心我可能必须完全孤立两者 - 带来极大的复杂性。 d3会救援吗?

0 个答案:

没有答案