#javascript #raphael
#javascript #рафаэль
Вопрос:
Я отчаянно пытаюсь построить сетку с кругами и текстом внутри. Пока все хорошо, я могу это сделать… Моя настоящая проблема заключается в возможности находить каждый набор и перемещать его (текст и круг). Я пытался рассмотреть похожие проблемы, но не могу разобраться сам… Если бы кто-нибудь мог дать мне подсказку, я был бы очень признателен.
Вот упрощенный код (всего 1 строка), который не работает :
$(function() {
// Prepare drawing zone
var paper = Raphael(document.getElementById('question'), '100%', '100%');
var word = 'Sunday';
var group = new Array();
// Draw 5 circles with text inside
for (i=0; i<5; i ) {
group[i] = paper.set();
group[i].push(paper.circle(50 i*60, 50, 30));
group[i].push(paper.text(50 i*60, 50, word));
group[i].click(function() {
group[i].translate(20,20); // HERE'S THE PROBLEM group[i] DOESN'T WORK !
group[i].rotate(Math.random() * 90);
});
}
});
Я не могу найти способ «вызова» моих наборов для дальнейшего использования…
Конечно, если у меня есть только 1 set (и нет array= , это работает…
Спасибо за вашу помощь!
Celfred.
Редактировать : jsfiddle : http://jsfiddle.net/rrWqM /
Редактировать: я не уверен, что я достаточно ясен. Я хотел бы иметь возможность щелкнуть по 1 кругу (и тексту) и увидеть, как ЭТОТ круг и текст перемещаются. Если я нажимаю на другой, то другой перемещается… Это звучит так просто, что я не могу поверить, что застрял на этом… Спасибо за помощь.
Ответ №1:
Вот [скрипка] [http://jsfiddle.net/DusKv/1 /]
Проблема в вашем коде заключается в том, что переменная i не имеет правильного значения при вызове функции обратного вызова click . Вы можете обойти это, определив локальную переменную во внешней области видимости.
// Prepare drawing zone
var paper = Raphael(document.getElementById('question'), '100%', '100%');
var word = 'Sunday';
var group = new Array();
// Draw 10 circles with text inside
for (i = 0; i < 10; i ) {
var set = paper.set();
set.push(paper.circle(50 i * 30, 50, 50));
set.push(paper.text(50 i * 30, 50, word));
set.click(function() {
set.translate(Math.random() * 350, Math.random() * 380); // HERE'S THE PROBLEM group[i] DOESN'T WORK !
set.rotate(Math.random() * 90);
});
group[i] = set;
}
Комментарии:
1. Спасибо за ответ, но … похоже, это тоже не работает:-( Единственный движущийся круг — последний, даже если я нажимаю на первый круг…
Ответ №2:
В конце концов, я нашел решение таким образом: jsfiddle
Теперь я получаю правильную ссылку в моем событии щелчка.
Должен признать, я не совсем понял свою первоначальную проблему. Если бы вы могли хотя бы сказать мне, подходит ли вам это новое «решение», я был бы признателен 😉
Celfred.