Eu precisava adicionar zoom / pan na visualização do d3.js. Depois de uma busca dolorosa no Google, finalmente encontrei uma maneira simples de fazer isso.
d3.js tem tudo a ver com apenas algumas linhas de código.
Você só precisa criar um g
elemento como primeiro filho do elemento SVG e conectar o d3.behavior.zoom()
comportamento.
var svg = d3.select("body")
.append("svg")
.attr("width", "100%")
.attr("height", "100%")
.call(d3.behavior.zoom().on("zoom", function () {
svg.attr("transform", "translate(" + d3.event.translate + ")" + " scale(" + d3.event.scale + ")")
}))
.append("g")
É isso aí!
Agora você pode adicionar todos os nós SVG a esse g
elemento de porta de visualização.
Há um exemplo ao vivo aqui: http://bl.ocks.org/sgruhier/1d692762f8328a2c9957
Atualização para v4
Para d3v4 é ainda mais simples, sem mais d3.behavior.zoom()
comportamento.
var svg = d3.select("body")
.append("svg")
.attr("width", "100%")
.attr("height", "100%")
.call(d3.zoom().on("zoom", function () {
svg.attr("transform", d3.event.transform)
}))
.append("g")
Há um exemplo ao vivo aqui https://bl.ocks.org/sgruhier/50990c01fe5b6993e82b8994951e23d0