snap raphaël que mapael library examples descargar javascript animation callback set raphael

javascript - raphaël - ¿Cómo eliminar correctamente un elemento SVG de Raphael al que se hace referencia en un conjunto animado?



raphaël 2.1 0 javascript vector library (2)

Tengo un conjunto de elementos SVG de Raphael animados. Estoy agregando nuevos elementos y eliminando los antiguos con llamadas ajax iniciadas por el usuario. Establezco.push () los elementos nuevos pero debido a que los elementos que necesito eliminar frecuentemente no son los últimos elementos en el conjunto, estoy usando element.remove () en lugar de set.pop (). Esto deja un elemento eliminado en el conjunto, que cuando invoco a set.animate (), hace que NO se llame al método de devolución de llamada de animación. Quizás esto es un error en Raphael 1.5.2.

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

¿Hay alguna forma mejor de eliminar los elementos a los que se hace referencia en un conjunto animado? ¿O simplemente tengo que administrar manualmente la matriz set.items, la variable set.length y establecer elementos cuando llamo al element.remove ()?

es decir, http://jsfiddle.net/G7fAQ/1/

Gracias


Para eliminar un elemento de una matriz (que es lo que es un set Rafael, después de todo), puede utilizar la función de splice .

Si conoce el índice del elemento en la matriz, es tan simple como:

set.items.splice(index);

Esto eliminará el elemento index-th de la matriz. splice devuelve el elemento eliminado, por lo que si necesita remove() o animarlo fuera de la pantalla, puede.

Editar: splice toma dos argumentos, el índice en la matriz para eliminar y cuántos elementos desea eliminar (más cualquier número de argumentos adicionales que sean miembros para agregar a la matriz, que no necesita aquí).

El código debe leer:

set.items.splice(index, 1);


Esto puede ser una adición desde la respuesta dada, pero set.exclude(elem) funciona ahora. Por ejemplo:

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.