JsFiddle:http: //jsfiddle.net/kKvtJ/5/
我有一个点击 a 的转换,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)
,或者我每次使用时都必须复制/粘贴它?我以为我可以在组上实例化一次转换/持续时间,然后通过子选择器一遍又一遍地重复使用它。对我想要转换的每个元素都这样做是否昂贵?