D3.js D3放大版本3

D3.js D3放大版本3,d3.js,zooming,D3.js,Zooming,有一些关于堆栈溢出的示例介绍了如何使用D3在力图中实现平移和缩放,但它们都使用D3版本2,而不是最新版本3 例如,这里有一个解决方案: 但是,在版本3中,在核心svg视图上应用transform=“translate(0,0)scale(0.5)”似乎不起作用 如果您不熟悉阅读,请原谅我的咖啡脚本: height = null width = null svg = null resizeHandler = -> height = $("#fcMiddle").height() w

有一些关于堆栈溢出的示例介绍了如何使用D3在力图中实现平移和缩放,但它们都使用D3版本2,而不是最新版本3

例如,这里有一个解决方案:

但是,在版本3中,在核心
svg
视图上应用
transform=“translate(0,0)scale(0.5)”
似乎不起作用

如果您不熟悉阅读,请原谅我的咖啡脚本:

height = null
width = null
svg = null

resizeHandler = ->
  height = $("#fcMiddle").height()
  width = $("#fcMiddle").width()
  console.log height+"x"+width
  rerender()

$(window).resize resizeHandler

redraw = ->
  #console.log "here", d3.event.translate, d3.event.scale
  svg.attr "transform", "translate(" + d3.event.translate + ")" + " scale(" + d3.event.scale + ")"

svg = d3.select("#fcMiddle").append("svg").attr("width", width).attr("height", height).attr("pointer-events", "all")

rerender = ->
  $("#fcMiddle svg").empty()
  svg.append('svg:g').call(d3.behavior.zoom().on("zoom", redraw)).append('svg:g').append('svg:rect').attr('width', width).attr('height', height).attr('fill', 'white')
  color = d3.scale.category20()
  force = d3.layout.force().charge(-120).linkDistance(30).size([width, height])
  d3.json "/data/systems.json", (error, graph) ->
    console.log graph
    force.nodes(graph.nodes).links(graph.links).start()
    link = svg.selectAll(".link").data(graph.links).enter().append("line").attr("class", "link").style("stroke-width", (d) ->
      Math.sqrt d.value
    )
    node = svg.selectAll(".node").data(graph.nodes).enter().append("circle").attr("class", "node").attr("r", 5).style("fill", (d) ->
      color d.group
    ).call(force.drag)
    node.append("title").text (d) ->
      d.name

    force.on "tick", ->
      link.attr("x1", (d) ->
        d.source.x
      ).attr("y1", (d) ->
        d.source.y
      ).attr("x2", (d) ->
        d.target.x
      ).attr "y2", (d) ->
        d.target.y

      node.attr("cx", (d) ->
        d.x
      ).attr "cy", (d) ->
        d.y

这与JavaScript中的版本几乎相同。如果窗口被重新缩放,我会重新绘制所有内容,并通过每次重新绘制所有内容时清除其内容来重用。这些内容不应影响缩放的转换。

当您将
转换应用于元素时,请确保不是
svg
元素--
转换
无效(有关更多信息,请参阅)。但是,您可以在顶层添加
g
元素(即,其他所有元素都添加在该元素下方)和
transform
该元素。

当您将
transform
应用于元素时,确保它不是
svg
元素--
transform
无效(有关更多信息,请参阅)。但是,您可以在顶层添加
g
元素(即,其他所有元素都添加在该元素下方)和
transform
元素。

D3和SVG是独立的,因此,对于将
transform
等属性应用于SVG,使用哪个版本无关紧要。据我所知,你发布的代码应该可以工作——你说它不工作是什么意思?@LarsKotthoff我看到转换属性被应用到根
,但武力导向图中绝对没有视觉上的差异。请发布一个完整的例子来演示这个问题好吗?@Larskothoff转到,键入用户名和密码,点击“注册”(无需确认),点击“创建舰队”,输入“测试”或在标题中输入任何内容,点击“创建舰队”,你会在界面中间看到图表。代码在coffeescript中,可以在浏览器(map.coffee)中轻松阅读。很抱歉给你一个链接,但我不能很容易地把所有代码都发布到这里。好的,在该页面的源代码中,我得到了大约50个Javascript文件的链接。你能提供一个小的例子吗?在任何情况下,在D3v3.D3和SVG中都有一个具有缩放行为的force layout的示例,因此对于将
transform
等属性应用于SVG,使用哪个版本无关紧要。据我所知,你发布的代码应该可以工作——你说它不工作是什么意思?@LarsKotthoff我看到转换属性被应用到根
,但武力导向图中绝对没有视觉上的差异。请发布一个完整的例子来演示这个问题好吗?@Larskothoff转到,键入用户名和密码,点击“注册”(无需确认),点击“创建舰队”,输入“测试”或在标题中输入任何内容,点击“创建舰队”,你会在界面中间看到图表。代码在coffeescript中,可以在浏览器(map.coffee)中轻松阅读。很抱歉给你一个链接,但我不能很容易地把所有代码都发布到这里。好的,在该页面的源代码中,我得到了大约50个Javascript文件的链接。你能提供一个小的例子吗?在任何情况下,都是一个在D3v3中具有缩放行为的强制布局示例。