如何正确删除动画集中引用的Raphael SVG元素?

时间:2011-07-29 18:44:18

标签: javascript animation callback set raphael

我有一套动画Raphael SVG元素。我正在添加新元素并使用用户启动的ajax调用删除旧元素。我set.push()新元素,但因为我需要删除的元素通常不是集合中的最后一个元素,我使用的是element.remove()而不是set.pop()。这会在集合中留下一个已删除的元素,当我调用set.animate()时,会导致不调用动画回调方法。也许这是拉斐尔1.5.2中的一个错误。

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

有没有更好的方法来删除动画集中引用的元素?或者我只需要在调用element.remove()时手动管理set.items数组,set.length变量和设置元素?

即。 http://jsfiddle.net/G7fAQ/1/

由于

2 个答案:

答案 0 :(得分:5)

要从数组中删除元素(毕竟这是Raphael set),您可以使用splice函数。

如果你知道数组中元素的索引,就像它一样简单:

set.items.splice(index);

这将从数组中删除索引元素。 splice会返回已删除的元素,因此如果您需要remove()它或将其设置为屏幕动画,则可以。

编辑:splice有两个参数,要删除的数组中的索引,以及要删除的元素数量(以及要添加到数组中的成员的任意数量的附加参数,您不应该这需要)。

代码应为:

set.items.splice(index, 1);

答案 1 :(得分: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.