Как я могу переместить наборы Raphael.js в определенные места? - PullRequest
0 голосов
/ 07 марта 2012

Если бы я анимировал отдельный элемент с помощью Raphael.js в определенном месте , то я мог бы использовать следующий код, который устанавливает атрибут x элементов:

elem.animate({x: specific_X_Location}, 1000);

но я не нашел способа переместить set в определенное место.

Есть две статьи SO: доступ к набору внутри набора в Raphael JS и
Как устроена анимация в Рафаэле?
которые обсуждают, как перевести набор на заданное расстояние (то есть переместить набор вправо на 100 или вверх на 100), которые используют преобразование или перевод, например,

var mySet = paper.set();
mySet.push(...add elements to set);
mySet.animate({transform: "t100,0"}, 1000); // move my set right by 100

но, похоже, нет способа переместить весь набор в определенное место.

Глядя на вещи в firebug, я полагаю, что набор - это просто массив в конце, поэтому он не имеет атрибутов x или y.

Можно ли получить доступ к любой информации об элементах набора, не обращаясь к ним индивидуально?

Как вы думаете, мне нужно будет разработать преобразование для определенного элемента, а затем применить это движение ко всему набору? Или есть лучший способ, который я пропустил?

Большое спасибо

1 Ответ

4 голосов
/ 06 июня 2012

Вы правы, что набор - это просто массив.И, к сожалению, нет простого способа переместить целый набор - по крайней мере из того, что я собрал.Я столкнулся с той же проблемой в проекте, над которым я работал, ну ... всю ночь.Казалось бы, этот набор наиболее полезен для применения атрибутов и т. Д. К большой группе объектов.Скажем, если вы хотите, чтобы на экране было сто красных кружков, это ваш парень.Но если вы попытаетесь применить преобразование к набору, оно будет работать так же, как и к атрибутам - это глобально для набора.Это означает, что все ваши круги будут иметь одинаковые координаты, масштаб и т. Д., А не только один.Обходной путь, который я использовал, заключается в использовании exclude и getById, например:

 yourSet.exclude(paper.getById('2'));

После исключения объекта из набора вы можете применить преобразование к единственному объекту, как этот.

 paper.getById('2').transform('t230,265s3');

Затем вы просто повторяете для каждого объекта, который хотите переместить.

Как вы можете себе представить, это невероятно утомительно для больших наборов, и вы также можете просто использовать синтаксис единственного числа var (если вы неВы применяете атрибуты к группе объектов).

Мне интересно, есть ли способ использовать синтаксис массива и математику, чтобы сделать это для вас, но тогда вы должны выяснить все отношениямежду объектами.

Или, возможно, мы увидим, будет ли более новый выпуск Рафаэля содержать какое-то простое преобразование множеств.Это было бы гениально.

...