完整的小提琴:https://jsfiddle.net/scottbrown0001/o7qL4dpr/
我正在尝试模仿Mike Bostock的对象恒定示例https://bost.ocks.org/mike/constancy/,我无法弄清楚他的第133行each()
选择了什么:
function change() {
clearTimeout(timeout);
d3.transition()
.duration(altKey ? 7500 : 750)
.each(redraw);
}
我在我的小提琴示例中使用了看似相同的构造,虽然它似乎确实使转换效果运行但我看不到较慢的持续时间。一般来说,这个构造d3.transition.each()
在具体细节中选择了什么?看起来它可能是某种“主转换”,但我看不出each()
迭代是如何工作的。我必须有一些关键的区别,但我没有看到它。
答案 0 :(得分:2)
就像你的另一个问题一样,这与d3 v3 vs d3 v4有很大关系。您将无法使用此代码在v4
中重现该行为查看d3 v4发行说明的this section,其中mbostock解决了transition.each中的更改:
这种方法取代了3.x中过渡的深刻神奇行为。在4.0中,transition.each与selection.each相同
在第3版中,transition.each与此处记录的不同:https://github.com/d3/d3-3.x-api-reference/blob/master/Transitions.md#each
[...]立即为当前转换中的每个元素调用指定的函数,使用当前DOM元素的this上下文传入当前数据d和索引i。
所以基本上它不能以相同方式工作的原因是,现在,transition.each将遍历受转换影响的每个元素。