【发布时间】:2013-07-02 20:09:38
【问题描述】:
JsFiddle:http://jsfiddle.net/kKvtJ/5/
单击g 时我有一个转换,它修改了每个g 中的几个元素。 jsfiddle 应该说清楚。点击10,然后点击11,然后点击8,看看它是如何转换的。
nodes_enter.on('click', function(d, i) {
var all_transition = d3.selectAll('g.bar').transition().duration(500);
var this_transition = d3.select(this).transition().duration(500);
all_transition.select('line').attr('opacity',0);
all_transition.select('text').style('fill','white').attr('x',0);
this_transition.select('line').attr('opacity',1);
this_transition.select('text').style('fill','black').attr('x',40);
// works
d3.selectAll('g.bar').transition().duration(500)
// doesn't work
// all_transition
.attr('transform', function (e, j) {
return 'translate(' + (j * 30 + (j > i ? 30 : 0)) + ',0)'
});
});
效果很好。
但是,如果我将最后一个转换的选择器更改为 all_transition,从左到右单击组时它无法正常工作。很奇怪。
如果我在变换中console.log,它将显示每个组的正确坐标。浏览器不会重新渲染更新的转换。
我做错了吗?是否有更可接受的方式重新使用.transition().duration(500),还是每次使用时都必须复制/粘贴?我想我可以在组上实例化一次转换/持续时间,然后通过子选择器一遍又一遍地重复使用它。对我想要转换的 每个 元素执行此操作是否昂贵?
【问题讨论】:
标签: d3.js transition