JqueryのsvgパスのgetBBox()を取得したいのですが。私はこのようにしてみました
$("#"+ path id)[0].getBBox() -> returns x=0,y=0,width=0,height=0
SVG要素へのパスを追加しました。 SVGで他の要素を試しました。たとえば、テキストノードの場合、境界ボックスの値を返します。
SVGでパスの境界ボックスを計算するにはどうすればよいですか?
<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 "/>
getBBoxはネイティブSVGメソッドであり、jqueryの一部ではないため、次のように記述する必要があります。
$("#"+ path id)[0].getBBox()
コードの例でゼロ以外の値とゼロの値を取得している場合は、ここに示していない何か他のことが起こっているはずです。
最も可能性の高い原因は、パスが<defs>
の子であることです。つまり、パターンまたはクリップパスで間接的に使用しているだけであるか、表示スタイルがnoneの場合、レンダリングされません。境界ボックスはありません。
Webkitの。実際に修正されました今getBBox()
ネイティブ実装はバグが多く、 バグトラッカーはこちら を見つけることができます
解決策は、そのような問題を計算するための独自のアルゴリズムを持つSVGライブラリを使用することです。そのうちの1つは Raphael.js です。
Raphael'selement.getBBox()
を使用できます。これは、ネイティブgetBBox()
と同じことを行います。
私もJQuery構文をうまく機能させるのに苦労しています。これが返されたncaught TypeError:Object [object Object] has no method 'getBBox':
console.log($("#testtext").getBBox().width);
...配列のインデックスを省略したため(@Christian Vielmaに感謝)。
ただし、標準のJavascriptが機能し、(私の場合)RECTの幅をChromeコンソールに表示できました。
console.log(document.getElementById("testtext").getBBox().width);
代わりに試してみてください。
Element.getBoundingClientRect()を試してください。これはhtml DOMからのものですが、SVG要素で動作します(あまり変換しません)。
確認することの1つは、svgがDOMに追加され、切り離されないことです。また、SVG要素が