いくつかの複合形状があるとしましょう(<g>
)。クリックしてドラッグできるようにしたいのですが、たまたまドラッグしているものをZオーダーでもう一方の上に置き、もう一方の上にドラッグすると、もう一方の上にドラッグしたいのです。 1つは日食する必要があります。
いくつかの複合形状があるとしましょう(<g>
)。クリックしてドラッグできるようにしたいのですが、たまたまドラッグしているものをZオーダーでもう一方の上に置き、もう一方の上にドラッグすると、もう一方の上にドラッグしたいのです。 1つは日食する必要があります。
回答:
SVGのZインデックスは、要素がドキュメントに表示される順序によって定義されます。特定の形状を上に表示する場合は、要素の順序を変更する必要があります。
$('#thing-i-want-on-top').appendTo('#my-svg');
ツリー内で要素を移動する代わりに<use>
、xlink:href
属性を変更する要素を使用して、必要なz順序を指定することもできます。
ここだ古いスレッド一部の図形をアニメーション化したいのコンテキストでこの話題を議論するメーリングリストSVG-開発者には。
更新:
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
style="width:100%; height: 100%">
<circle id="c1" cx="50" cy="50" r="40" fill="lime" />
<rect id="r1" x="4" y="20" width="200" height="50" fill="cyan" />
<circle id="c2" cx="70" cy="70" r="50" fill="fuchsia" />
<use id="use" xlink:href="#c1" />
</svg>
この例では、<use>要素が最後の要素であり、これが最前面の要素になります。xlink:href
属性を変更するだけで、他の要素を選択して最前面として機能させることができます。上記の例では、で円を選択しましたid="c1"
。これにより、最上位の要素として表示されます。
フィドルを参照してください。
xlink:href
は非推奨になりましたが、今はただhref
これは古い質問ですが...
FireFox(7+)およびChrome(14+)では、svg_elementを一番上にプルできます。これは完全なz軸制御の自由を与えませんが、何もないよりはましです;)
その要素をもう一度追加するだけです。
var svg = doc.createElemNS('svg');
var circle = doc.createElemNS('circle');
var line = doc.createElemNS('line');
svg.appendChild(circle); // appends it
svg.appendChild(line); // appends it over circle
svg.appendChild(circle); // redraws it over line now
エラーか何かを投げるだろうと思った。
appendChild ==自分自身を置き換える==再描画
appendChild
新しい親と同じであっても、最初に古い親から削除し、次にそれを新しい親の子リストに追加します。
言及されていない別の解決策は、各svgアイテム/アイテムのセットをdivに入れることです。divのz-indexを簡単に変更できます。
...ボタンを押して、その要素を前面に「押し」ます。(vsセット全体を塗り直し、1つの要素を前面に押しますが、受け入れられたソリューションのように元の順序を維持します)
相対的なzインデックスがあると非常に便利です...
stackOverflowは、jsfiddleからのリンクの場合、コードを配置するように求めていますか?... ook
svg.jsライブラリを使用する場合は、「。front()」コマンドを使用して任意の要素を一番上に移動できます。
サムの答えに対するアダム・ブラッドレイのコメントは正確に正しいものでした。CSSだけではなくjQueryを使用していますが、彼は次のように述べています。
$('#thing-i-want-on-top').appendTo('#my-svg');
ただし、私が作成していたものについては、ホバー時にSVGパスが他のパスの上にある必要がありましたが、それでもSVGテキストの下にあります。だからこれが私が思いついたものです:
$('#thing-i-want-on-top').insertBefore('#id-for-svg-text');
appendToとinsertBeforeの両方が要素を新しい場所に移動し、SVG要素の深さを自由に変更できるようにします。