La création de barres de défilement avec SVG et d3.js

Droit maintenant, je l'ai utilisé d3 pour créer plusieurs "boîtes" qui sont simplement SVG rectangles avec le texte:

var canvas = d3.select("body").append("svg")
    .attr("width", 800)
    .attr("height", 500);


//specifies drawing area for each box
var boxes = canvas.selectAll("rect")
    .data(classData)
    .enter();

boxes.append("rect")
        .attr("width", boxWidth)
        .attr("height", boxHeight)
        .attr("fill", boxColor)
        .attr("x", function (d, i) { return i * 2 * boxWidth });


text.append("text")
        .attr("fill", textColor)
        .attr("x", function (d, i) 
              { return i * 2 * boxWidth + 5 })
        .attr("y", 20)
        .style("width", "20px")
        .style("overflow-x", "scroll")
        .text(function(d) {return d.name});

La création de barres de défilement avec SVG et d3.js

Maintenant ce que je voudrais faire est d'ajouter des barres de défilement pour chaque boîte lorsque le texte est en dehors des limites de la zone. J'ai vu un couple d'exemples qui créé un div et utilisé le CSS pour gérer le trop-plein. Cependant, je vais avoir plusieurs (variable) des boîtes et je ne suis pas sûr de savoir comment aller à ce sujet.

Des suggestions?

-- UPDATE --

J'ai été en mesure d'obtenir des barres de défilement apparaissent en ajoutant des éléments svg pour un div qui contrôle le défilement avec des styles CSS.

.container {
    height: 225px;
    width: 175px;
    border:2px solid #000;
    overflow-y: scroll;
    overflow-x: hidden;
}

svg {
    display: block;
    width: 200%;
    height: 200%;
}

Cependant, le défilement semble être touchés que par la largeur et la hauteur des pourcentages de l'élément svg plutôt que de le rect élément qui est établi dans la div. En d'autres termes, si la taille est trop grande, vous ne pouvez toujours pas de défilement pour voir toutes, à moins que vous augmentez la largeur et la hauteur de l'élément svg.

Est-il un moyen que je peux avoir la div défilement en se basant sur ce qui est dessiné à l'intérieur de celui-ci? Ou devrais-je essayer en quelque sorte de calculer et de modifier les attributs width et height de l'élément svg?

voir le code ici

  • Vous aurez besoin d'ajouter les divs de votre document et de les positionner sur le haut de la svg. Ensemble overflow-y: scroll sur les divs.
  • Merci pour votre réponse! Je pense que j'ai fait ce que vous avez dit ici: jsfiddle.net/azkqyjp6/3 Mais j'ai encore quelques questions. 1) Le rectangle apparaît plus petite que ce qu'elle devrait. Pourquoi est-ce qui se passe, et comment puis-je résoudre ce problème? Et 2) Quand j'ai augmenté la hauteur du rectangle, il est juste clipsé, et pas de barre de défilement apparaît. Ce que je fais mal?
  • Non, vous ne pouvez pas utiliser des rectangles. Vous devez ajouter les divs sur le corps et de se positionner sur le haut de la svg à l'aide absolu/correction du positionnement.
  • Vous pouvez calculer la largeur et la hauteur de l'élément svg pour obtenir votre barre de défilement fonctionne correctement. Est-il une raison pourquoi vous avez besoin pour rendre le texte svg au lieu de simplement ajouter directement à la div en html?
InformationsquelleAutor dsabsay | 2015-04-25