2011-07-29 7 views
4

私は、アニメーション化されたRaphael SVG要素のセットを持っています。私は新しい要素を追加し、古いものをユーザーが開始したajax呼び出しで削除しています。 set.push()の代わりにelement.remove()を使用しています。これは、set.animate()を呼び出すとアニメーションコールバックメソッドが呼び出されないようにする、セット内の削除された要素を残します。おそらくこれはRaphael 1.5.2のバグです。アニメーションセットで参照されているRaphael SVG要素を正しく削除するにはどうすればよいですか?

jsFiddle例:http://jsfiddle.net/G7fAQ/

はアニメーションセットで参照されている要素を削除するためのより良い方法はありますか?または、element.remove()を呼び出すとset.items配列、set.length変数、および要素を手動で管理するだけですか?

すなわちhttp://jsfiddle.net/G7fAQ/1/

おかげ

答えて

5

(ラファエルsetすべての後、あるものである)の配列から要素を削除するには、あなたがsplice機能を使用することができます。

あなたは配列の要素のインデックスを知っている場合、それは同じくらい簡単です:これは、配列からインデックス番目の要素を削除します

set.items.splice(index); 

spliceは削除された要素を返します。したがってremove()が必要な場合、または画面からアニメーションすることができます。

編集:spliceは、2つの引数、削除する配列内のインデックス、削除する要素の数(さらに、配列に追加する要素の数に加えて、ここでは不要です)。

コードは次のようになります。

set.items.splice(index, 1); 
+0

ラファエル 'set'は' splice'関数に応答しないようです。 http://jsfiddle.net/G7fAQ/2/ – Justin

+1

を参照してください。 'set'の' items'プロパティは配列であり、 'splice'に応答します。 http://jsfiddle.net/chris5marsh/G7fAQ/22/を見てください - 私はこれがあなたが望むように応答していると思います。 – chris5marsh

+0

ニース!それは動作します、ありがとう!私はそれを試みたと思ったが、私はそうは思わない。 – Justin

1

は、これは与えられた答え以来加えても、今set.exclude(elem)働きがあります。例:

var set = paper.set(), 
    elem = paper.circle(50, 50, 25); 
set.push(elem) // elem now in set 
set.exclude(elem) // what once was, forever may not be. 
関連する問題