はdocument (fiddle)次私が持っていると仮定します。グループ化されたsvg要素のグローバル座標を取得するにはどうすればよいですか?
<svg>
<g transform="translate(50,50)">
<rect width="20" height="20" style="fill:black;">
</g>
</svg>
がどのように私はそれがグループ内だと知っていないと仮定すると矩形要素のグローバル座標を得るのですか?
はdocument (fiddle)次私が持っていると仮定します。グループ化されたsvg要素のグローバル座標を取得するにはどうすればよいですか?
<svg>
<g transform="translate(50,50)">
<rect width="20" height="20" style="fill:black;">
</g>
</svg>
がどのように私はそれがグループ内だと知っていないと仮定すると矩形要素のグローバル座標を得るのですか?
実際に見つけるのは難しいことでした。 SVGElement
のメソッドを検索すると、SVGElement
にはメソッドがありませんというページが表示されます。それは実際にはメソッドのトンを持っていますが、それらは継承されています
http://www.w3.org/TR/SVG/types.html#InterfaceSVGLocatable
あなたがSVGPoint
を変換するためにgetCTM
またはgetScreenCTM
の結果を使用することができますしたい内容に応じて、あなたの要素がどこにあるように学びます:
root = document.getElementById('root')
rec = document.getElementById('rec')
point = root.createSVGPoint()
# This is the top-left relative to the SVG element
ctm = rec.getCTM()
console.log point.matrixTransform(ctm)
# This is the top-left relative to the document
ctm = rec.getScreenCTM()
console.log point.matrixTransform(ctm)
あなたはバウンディングボックスを取得する機能.getBoundingClientRect()
を使用することができます。次に、height
,width
,top
およびleft
の値を使用して、要素の中心位置を探します。
https://developer.mozilla.org/es/docs/Web/API/Element/getBoundingClientRect
ニース!私はmatrixTransformについて知らなかった。 JavaScriptはあなたのフィドルでは空です。更新しましたか?これをテストしようとしています。 –
作品!ありがとう。働くフィドル:http://jsfiddle.net/T8aZP/14/ –
私はthedeenoのリンクされたフィドルを試みたが、私は期待した結果を得られなかった。ここにgetBBoxを使ってポイントの初期座標を設定するフォークがあります:http://jsfiddle.net/kitsu_eb/T8aZP/15/ –