12
votes

Obtenir la boîte de sélection pour le chemin SVG en utilisant jQuery

Je veux obtenir la getbox () pour le chemin SVG à JQuery. J'ai essayé comme ça xxx pré>

J'ai ajouté le chemin d'un élément SVG. J'ai essayé un autre élément de SVG, par exemple un nœud de texte dans ce cas, il renvoie la valeur de la boîte de sélection de la bordure. P>

Comment puis-je calculer la boîte de sélection d'un chemin dans SVG? P>

<path id="container_svg_John_0" fill="none" stroke-width="3" stroke="url(#container_svg_John0Gradient)" stroke-linecap="butt" stroke-linejoin="round" d="M -2390.2 -125.8888888888889 L 0 0 M 0 0 L 251.60000000000002 -45.77777777777778 M 251.60000000000002 -45.77777777777778 L 503.20000000000005 -11.444444444444445 M 503.20000000000005 -11.444444444444445 L 629 -183.11111111111111 "/>


1 commentaires

Peut-être que vous pouvez trouver une inspiration dans cet utilitaire simple qui vous permet de saisir un chemin puis d'afficher la boîte de sélection. Codepen.io/Netsi1964/full/vnoemp


5 Réponses :


12
votes

getbox est une méthode svg natif et ne fait pas partie de jQuery, vous devez donc écrire xxx

exemple

Si vous obtenez une valeur non nulle pour l'exemple et une valeur zéro dans votre code, il doit y avoir autre chose que vous" nous ne nous a pas montré.

Les causes les plus susceptibles sont que le chemin est un enfant de , c'est-à-dire que vous l'utilisez indirectement dans un motif ou une clippathe ou si elle a un style d'affichage d'aucun auquel cas il ne serait pas rendu alors n'aurait aucune boîte de sélection.



10
votes

the getbox () implémentation native en webkit est buggy, vous pouvez trouver le suivi de bogues ici . En fait, il est fixe maintenant

Une solution consiste à utiliser une bibliothèque SVG qui possède ses propres algorithmes pour calculer de telles questions, l'une d'elles est Raphael.js .

Vous pouvez utiliser element.getbbox () , qui fait la même chose que l'indigène getbox () .


2 commentaires

En fait, Cela ne fonctionne pas sur Chrome . Le Sample Là montre le problème et les différences entre le courant Version chromée (45) et la plus récente IE / FF.


Chrome est correct maintenant - la divergence dans l'échantillon affiché dans le commentaire ci-dessus est due à la largeur de course.



6
votes

Moi aussi j'ai du mal à faire travailler la syntaxe de jQuery pour moi. Ceci renvoyé non capturé typeError: objet [objet objet] n'a pas de méthode 'getbox' : xxx

... parce que j'avais omis l'index de la matrice (mercifristian Vielma , ci-dessous)!

Cependant, JavaScript standard a fonctionné pour moi et j'ai pu afficher la largeur du rect (dans mes cas) dans la console chrome: xxx

Pour que vous puissiez essayer cela à la place.


2 commentaires

Je crois que vous devez utiliser $ ('# testtext') [0] .getbbox (). Largeur


Juste pour clarifier, $ ('# testtext') [0] ( jQuery () ) et document.getelementByID ("testtext") renvoie un objet Element DOM, qui prend ensuite en charge de manière native getbox (). largeur sur sur < Un href = "https://developer.mozilla.org/en-us/docs/web/api/svggraphicsElement" rel = "Nofollow Noreferrer"> SVG Eléments



0
votes

try element.getboundingClientRect (). Il provient de la DOM HTML, mais travaille pour moi sur les éléments SVG (sans grande transformation).


0 commentaires

0
votes

Une chose pour vous assurer que votre SVG est ajouté à la DOM et non détachée. Assurez-vous également que votre élément SVG


0 commentaires