Ajouter des points de suspension pour le débordement de texte en SVG?
Je suis en utilisant D3.js
. J'aimerais trouver une SVG équivalent à celui de cette classe CSS, ce qui ajoute des points de suspension si le texte coule de sa div contenant:
.ai-ellipsis {
display: block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
-o-text-overflow: ellipsis;
-moz-binding: url(<q>assets/xml/ellipsis.xml#ellipsis</q>);
}
C'est mon SVG:
<g class="bar" transform="translate(0,39)">
<text class="label" x="-3" y="6.5" dy=".35em" text-anchor="start">Construction</text>
<rect height="13" width="123"></rect>
</g>
C'est générée comme suit:
barEnter.append("text").attr("class", "label")
.attr("x", -3).attr("y", function() { return y.rangeBand() / 2})
.attr("dy", ".35em").attr("text-anchor", "start")
.text(function(d) {
return d.Name;
});
Actuellement, le texte déborde et se chevauchent les rect élément.
Est-il possible que je peux dire, "si le texte est plus qu'une certaine largeur, de la recadrer et ajouter des points de suspension"?
- Une fois que vous avez mis en place votre solution, en termes d'amélioration de l'UX, vous pouvez envisager de fournir une alternative à montrer la valeur d'origine, dans le cas où le texte tronqué n'est évidemment pas facile de les comprendre ou de les distinguer des autres textes tronqués. par exemple, utiliser les info-bulles
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas au courant d'un équivalent de la classe CSS pour le SVG, mais vous pouvez utiliser
foreignObject
pour intégrer le code HTML dans le SVG. Cela vous donne accès à cette fonctionnalité et est plus souple en général (par exemple, vous pouvez le faire automatique de coupure de ligne facilement).Voir ici pour un exemple complet.
foreignObject
ne fonctionne pas dans n'importe quelle version de IE bien.une fonction wrapper pour le débordement de texte:
utilisation:
wrap()
de retour d'une fonction comme:function wrap(width, padding) { return function() { /* original function */ } }
. L'utilisation seraittext.append('tspan').text(function(d) { return d.name; }).each(wrap(100, 5));
J'ai implémenté une fonction native qui ne dépend pas de d3, cette fonction implémente 3 chemin de base:
Utiliser cette fonction pour définir le format SVG nœud de texte. La valeur de seuil (par exemple. 20) dépend de vous. Cela signifie que vous allez afficher jusqu'à 20 caractères à partir de votre nœud de texte. Tous les textes de la râpe de 20 caractères sera de garniture et d'affichage "..." à la fin de la garniture de texte.
D'utilisation par exemple. :
Juste une mise à jour sur l'habillage de la fonction proposée par user2846569. getComputedTextLength() a tendance à être très lente, donc...
MODIFIER
Je diligence appliqué les conseils par user2846569 et fait une version avec "binaire" de la recherche, avec un calibrage et paramétrés de précision.
Vue sur JSFiddle.