D3 力图未按预期平移或缩放
D3 force graph doesn't pan or zoom as expected
我主要基于 these really helpful examples.
构建了一个 D3 力图
我想添加平移和缩放功能,我尝试使用另一个示例(看起来我只能包含两个链接,但 Google "d3 force zoom eyaler" 找到它)。
不幸的是,当我缩小一个大于初始 SVG 的图表时,我得到了这样的结果:
Result of dragging and dropping
相关代码如下:
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
.call(d3.behavior.zoom().scaleExtent([0.5,2]).on("zoom", redraw));
function redraw() {
svg.attr("transform",
"translate(" + d3.event.translate + ")"
+ " scale(" + d3.event.scale + ")");
}
如何更改平移和缩放行为,使其滚动并能够看到图表的其余部分,而不是仅仅让我移动最初可见的方块?
好的,看来我已经解决了...您需要对 <g>
而不是 SVG 本身执行转换。所以:
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
.call(d3.behavior.zoom().scaleExtent([0.5,2]).on("zoom", redraw));
var g = svg.append("g"); // add <g>
function redraw() {
g.attr("transform", // perform transform on g, not svg
"translate(" + d3.event.translate + ")"
+ " scale(" + d3.event.scale + ")");
}
只是把它放在这里以防其他人犯同样的错误!
我主要基于 these really helpful examples.
构建了一个 D3 力图我想添加平移和缩放功能,我尝试使用另一个示例(看起来我只能包含两个链接,但 Google "d3 force zoom eyaler" 找到它)。
不幸的是,当我缩小一个大于初始 SVG 的图表时,我得到了这样的结果:
Result of dragging and dropping
相关代码如下:
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
.call(d3.behavior.zoom().scaleExtent([0.5,2]).on("zoom", redraw));
function redraw() {
svg.attr("transform",
"translate(" + d3.event.translate + ")"
+ " scale(" + d3.event.scale + ")");
}
如何更改平移和缩放行为,使其滚动并能够看到图表的其余部分,而不是仅仅让我移动最初可见的方块?
好的,看来我已经解决了...您需要对 <g>
而不是 SVG 本身执行转换。所以:
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
.call(d3.behavior.zoom().scaleExtent([0.5,2]).on("zoom", redraw));
var g = svg.append("g"); // add <g>
function redraw() {
g.attr("transform", // perform transform on g, not svg
"translate(" + d3.event.translate + ")"
+ " scale(" + d3.event.scale + ")");
}
只是把它放在这里以防其他人犯同样的错误!