Ich benutze Topojson mit D3, um eine Karte zu erstellen. Auf der Karte mache ich folgendes um Orte zu plotten. Wenn Sie jedoch in die Karte zoomen, möchte ich, dass der .place-Kreis beim Zoomen kleiner wird.D3 Scale SVG Kinder
Objekte
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
.attr("id", "map");
var g = svg.append("g")
.call(zoom);
var map = g.append("g")
.attr("transform", "translate(0,0) scale(1)");
Skalierung
s = 4000;
zoom = d3.behavior.zoom()
.translate(projection.translate())
.scale(projection.scale())
.scaleExtent([s, s * 4])
.on("zoom", zoommove);
die Orte Plotten:
topGroup = map.append('g').attr('id', 'mapGroup');
topGroup.selectAll(".place")
.data(topojson.feature(mapData, transformedPlotData).features)
.enter()
.append("circle")
.attr('cx', function(d) { return path.centroid(d)[0] })
.attr('cy', function(d) { return path.centroid(d)[1] })
.attr("r", 4);
Zoom
function zoommove() {
var t1 = projection.translate(),
t2 = d3.event.translate,
t = [t2[0]-t1[0], t2[1]-t1[1]];
map.attr("transform",
"translate("+t+") " +
"scale("+(d3.event.scale/s)+")"
);
}
Dank all
Können Sie ein funktionierendes Beispiel in JSFiddle oder einem anderen ähnlichen Repository veröffentlichen? Was meinst du damit, den Kreis kleiner zu machen? Meinst du es beim Zoomen in einer konstanten Größe zu halten? Läuft der obige Zoom-Algorithmus tatsächlich so, wie Sie es erwarten? Was passiert genau? Bitte nehmen Sie sich etwas Zeit, um Ihr Problem im Detail zu beschreiben. – helderdarocha