D3
OG
Old school D3 from simpler times
All examples
By author
By category
About
Igathi
Full window
Github gist
Map-Zoom
Built with
blockbuilder.org
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Geo Map</title> </head> <style> .background { fill: none; pointer-events: all; } .feature { fill: #ccc; cursor: pointer; } .feature.active { fill: orange; } .mesh { fill: none; stroke: #fff; stroke-linecap: round; stroke-linejoin: round; } </style> <body> <!-- <script src="//d3js.org/d3.v3.min.js"></script> <script src="d3.min.js"></script> --> <script src="https://d3js.org/d3.v3.min.js"></script> <script src="https://d3js.org/topojson.v1.min.js"></script> <script> var width = 960, height = 500, active = d3.select(null); var projection = d3.geo.albersUsa() .scale(1000) .translate([width / 2, height / 2]); var path = d3.geo.path() .projection(projection); var svg = d3.select("body").append("svg") .attr("width", width) .attr("height", height); svg.append("rect") .attr("class", "background") .attr("width", width) .attr("height", height) .on("click", reset); var g = svg.append("g") .style("stroke-width", "1.5px"); d3.json("https://gist.githubusercontent.com/mbostock/4090846/raw/us.json", function(error, us) { if (error) throw error; g.selectAll("path") .data(topojson.feature(us, us.objects.states).features) .enter().append("path") .attr("d", path) .attr("class", "feature") .on("click", clicked); g.append("path") .datum(topojson.mesh(us, us.objects.states, function(a, b) { return a !== b; })) .attr("class", "mesh") .attr("d", path); }); function clicked(d) { if (active.node() === this) return reset(); active.classed("active", false); active = d3.select(this).classed("active", true); var bounds = path.bounds(d), dx = bounds[1][0] - bounds[0][0], dy = bounds[1][1] - bounds[0][1], x = (bounds[0][0] + bounds[1][0]) / 2, y = (bounds[0][1] + bounds[1][1]) / 2, scale = .9 / Math.max(dx / width, dy / height), translate = [width / 2 - scale * x, height / 2 - scale * y]; g.transition() .duration(750) .style("stroke-width", 1.5 / scale + "px") .attr("transform", "translate(" + translate + ")scale(" + scale + ")"); } function reset() { active.classed("active", false); active = d3.select(null); g.transition() .duration(750) .style("stroke-width", "1.5px") .attr("transform", ""); } </script> </body> </html>
https://d3js.org/d3.v3.min.js
https://d3js.org/d3.v3.min.js
https://d3js.org/topojson.v1.min.js