2017-04-04 15 views
0

SVG要素を1つのSVGコンテナに複製し、&を別のSVGコンテナにドラッグすることはできますか?私は先の容器にソースコンテナから要素をドロップ/ドラッグする機能を希望SVGコンテナ間でのSVG要素のドラッグ/ドロップ

<svg> -source container 
<g><!-- some elements --></g> 
</svg> 
<svg> -destinatin container 
</svg> 

: は、私はこのようなSVGsを設定しています。ここにはjsfiddleがあります。 hereからドラッグ&ドロップを追加しましたが、これは1つのSVGコンテナ内でのみ動作します。

+0

あなたは元の容器内のオブジェクトを削除して、新しいコンテナにそれを追加する必要があると思います。 –

+0

@RobertLongson私はそれを削除するだけで、それを複製したくないです。しかし、それをソースコンテナから切り離した後、ドラッグ&ドロップしてそれをデスティネーションコンテナにアタッチすることは可能ですか? – Nodios

+0

参照を取得したら、appendChildを使用して任意の場所に追加することができます。 –

答えて

0

はい。それは単純だ。最初のSVGから要素を削除するには、removeChild()を実行してください。次にappendChild()を実行して2番目のSVGに追加します。

エレメントが<svg>エレメントの直接の子でない場合は、エレメントの親グループにremoveChild()を呼び出す必要があります。つまりgroup要素がグループに含まれている場合は、その要素を返します。

document.getElementById("btn").addEventListener("click", function (evt) { 
 

 
    var rect = document.getElementById("rect"); 
 
    var fromSVG = rect.ownerSVGElement; 
 

 
    var toId = (fromSVG.id === "source") ? "dest" : "source"; 
 
    var toSVG = document.getElementById(toId); 
 

 
    fromSVG.removeChild(rect); 
 
    toSVG.appendChild(rect); 
 
});
#source { 
 
    background-color: #ffeeee; 
 
} 
 

 
#dest { 
 
    background-color: #eeffee; 
 
}
<svg id="source"> 
 
    <rect id="rect" x="100" y="50" width="50" height="40" fill="red"/> 
 
</svg> 
 

 
<svg id="dest"> 
 
</svg> 
 

 
<br/> 
 

 
<button id="btn">Click me to move rectangle</button>