D3.js D3放大版本3
有一些关于堆栈溢出的示例介绍了如何使用D3在力图中实现平移和缩放,但它们都使用D3版本2,而不是最新版本3 例如,这里有一个解决方案: 但是,在版本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
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中具有缩放行为的强制布局示例。