Как правильно удалить элемент Raphael SVG, указанный в анимированном наборе? - PullRequest
4 голосов
/ 29 июля 2011

У меня есть набор анимированных элементов Raphael SVG.Я добавляю новые элементы и удаляю старые с помощью пользовательских вызовов AJAX.Я устанавливаю .push () новые элементы, но поскольку элементы, которые мне нужно удалить, часто не являются последними элементами в наборе, я использую element.remove () вместо set.pop ().Это оставляет удаленный элемент в наборе, который, когда я вызываю set.animate (), приводит к тому, что метод обратного вызова анимации НЕ вызывается.Возможно, это ошибка в Raphael 1.5.2.

Пример jsFiddle: http://jsfiddle.net/G7fAQ/

Есть ли лучший способ удалить элементы, на которые есть ссылки в анимированном наборе?Или мне просто нужно вручную управлять массивом set.items, переменной set.length и заданием элементов при вызове element.remove ()?

т.е. http://jsfiddle.net/G7fAQ/1/

Спасибо

Ответы [ 2 ]

5 голосов
/ 03 августа 2011

Чтобы удалить элемент из массива (в конце концов, именно таким является Raphael set), вы можете использовать функцию splice.

Если вы знаете индекс элемента в массиве, это просто:

set.items.splice(index);

Это удалит индексный элемент из массива. splice возвращает удаленный элемент, поэтому, если вам нужно remove() его или анимировать с экрана, вы можете.

Редактировать: splice принимает два аргумента: индекс в массиве для удаления и сколько элементов вы хотите удалить (плюс любое количество дополнительных аргументов, являющихся членами для добавления в массив, которые вам не нужны здесь).

Код должен гласить:

set.items.splice(index, 1);
1 голос
/ 27 сентября 2013

Это может быть добавление с момента получения ответа, но 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.
...