我有一套动画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/
由于
答案 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.