d3.js Carte (<svg>) ajuster automatiquement dans Conteneur Parent et Redimensionner avec Fenêtre
Mise à JOUR: j'ai posté et accepté un travail entièrement solution dans les réponses de la section. Le code de cette section est utilisée comme référence pour la comparaison aux NON-code de TRAVAIL, mais ne doit pas être utilisé comme solution.
Je suis en train de construire un tableau de bord et d3.js pour ajouter une carte du monde qui intrigue les tweets en temps réel basé sur la géo-localisation.
La monde.json fichier référencé dans d3.json() de la ligne est téléchargeable ICI (on appelle monde-pays.json).
La carte est sur la page comme un conteneur SVG et est rendu à l'aide de la d3.
Ci-dessous sont les segments de code.
<div id="mapContainer">
<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="500"></svg>
</div>
#mapContainer svg {
display:block;
margin:0 auto;
}
#mapContainer path {
fill:#DDD;
stroke:#FFF;
}
//generate US plot
function draw() {
var map = d3.select("svg");
var width = $("svg").parent().width();
var height = $("svg").parent().height();
var projection = d3.geo.equirectangular().scale(185).translate([width/2, height/2]);
var path = d3.geo.path().projection(projection);
d3.json('plugins/maps/world.json', function(collection) {
map.selectAll('path').data(collection.features).enter()
.append('path')
.attr('d', path)
.attr("width", width)
.attr("height", height);
});
}
draw();
latestLoop();
$(window).resize(function() {
draw();
});
Mise à JOUR: j'ai mis à l'échelle de la carte pour une taille acceptable (pour mon particulier, la taille du navigateur), mais elle ne sera pas mise à l'échelle et au centre lorsque je change la taille de la fenêtre. SI, toutefois, je redimensionner la fenêtre, puis cliquer sur "actualiser", alors la carte sera centrée sur une fois que la page est rechargée. Cependant, puisque l'échelle est statique, il n'est pas ajustée correctement.
Vous devez vous connecter pour publier un commentaire.
SOLUTION COMPLÈTE:
Voici la solution qui va redimensionner la carte APRÈS que l'utilisateur a publié le bord de la fenêtre, de la redimensionner, et le centrer dans le conteneur parent.
La sélection de l'objet est un tableau multidimensionnel, bien que dans la plupart des cas, il n'aura sans doute qu'un objet en elle. Cet objet a un "clientWidth" champ vous indique quelle est la largeur de son parent.
De sorte que vous pouvez le faire:
selection._groups[0][0].clientWidth
Cela devrait fonctionner:
Le meilleur choix est d'avoir une combinaison de l'utilisation du ratio d'aspect normal de la définition de la d3 du graphe de largeur et de hauteur. Cela m'a aidé dans beaucoup de mon graphique fonctionne.
Étape 1 : obtenir Dynamiquement la hauteur de la div pour laquelle le graphique doit être ajouté.
Étape 2 : Déclarer largeur comme ratio d'aspect à l'égard de l'dynamiquement pris de la hauteur.
En d3 v4, nous pourrions le faire
fitSize est équivalent à
remplissez pas à ajouter rembourrage