【发布时间】:2012-04-11 00:47:31
【问题描述】:
我有一个包含一组节点的 d3 力有向图:
var node = vis.selectAll("g.node")
.data(json.nodes)
.enter().append("svg:g")
.attr("class", "node")
.attr("id", function(d) { return "node" + d.index; })
.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; })
.call(force.drag);
这渲染得很好。
现在,当我显示 ID 为 detail_container 的详细信息 div 时,我想将这些节点向右平移(移动)200 像素。
我尝试了以下操作,但是当我显示 detail_container 时节点没有任何反应(除了显示详细信息 div):
$('#detail_container').fadeIn('slow', function() {
d3.selectAll("g.node").attr("transform", function(d) { return "translate(200, 0)"; });
});
d3.selectAll("g.node") 语句包含节点数据,我可以通过查看控制台中的数据来确认:
console.log(d3.selectAll("g.node"));
作为另一种方法,我将缩放/平移行为附加到我的图表中:
var vis = d3.select("#position")
.append("svg:svg")
.attr("width", w)
.attr("height", h)
.attr("pointer-events", "all")
.append("svg:g")
.call(d3.behavior.zoom().on("zoom", redraw))
.append("svg:g");
这很好用。但是,这与鼠标交互,而不是与我的程序中发生的事件交互,那么是否有一种 programmatic 方式来调用缩放/平移行为,以便我可以完成我想要的翻译? p>
【问题讨论】:
标签: javascript events d3.js geometry force-layout