javascript - D3 力图未按预期平移或缩放

标签 javascript d3.js svg force-layout

我主要基于 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 + ")");
}

如何更改平移和缩放行为,使其滚动并可以看到图表的其余部分,而不是仅仅允许我移动最初可见的方 block ?

最佳答案

好吧,看起来我已经解决了...您需要对 <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 + ")");
}

只是将其放在这里,以防其他人犯同样的错误!

关于javascript - D3 力图未按预期平移或缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44998278/

相关文章:

javascript - 使用带有路径 url 的 SSL 上的 D3 请求 (json) 会出现混合内容错误?

css - JSX 中的 SVG - 如何转换 defs 标签

javascript - innerHTML 仅在 Chrome 中编码

Javascript - 单击 svg 形状时调用函数。

javascript - PageMod 多次将 worker 附加到同一个 URL

javascript - jQuery 修复点击后页面滚动到顶部

javascript - 使用 ngOptions 选择将 undefined 返回到 ngModel

javascript - 如何从 JavaScript 模块模式中的私有(private)函数中调用公共(public)函数

d3.js - 在绘制文本之前计算文本的宽度

javascript - d3 - 单击时触发的拖动行为