Составная команда из переменной и текста
Задача: Создать цикл, в котором свойства большого количества графических элементов будут меняться.
В теле объявляю объект <svg>, состоящий с нескольких элементов <circle> с id от circle001 до circle100, например. Далее скрипт с анимацией, работающий по наведению на элемент:
animate(function(timePassed) {
circle001.setAttributeNS(null, "cx" , X0 - timePassed*(X0 - X001)/1000);
circle001.setAttributeNS(null, "cy" , Y0 - timePassed*(Y0 - Y001)/1000);
circle001.setAttributeNS(null, "r" , 1 + timePassed*0.003);
}, 1000);
Пытаюсь сделать цикл с переменной i:
animate(function(timePassed) {
var stringx = [];
var stringy = [];
var stringr = [];
var i = 1;
while (i<5) {
stringx[i]='circle00'+i+'.setAttributeNS(null, "cx" , X0 - timePassed*(X0 - X00'+i+')/1000)';
stringy[i]='circle00'+i+'.setAttributeNS(null, "cy" , Y0 - timePassed*(Y0 - Y00'+i+')/1000)';
stringr[i]='circle00'+i+'.setAttributeNS(null, "r" , 1 + timePassed*0.003)';
stringx[i];
stringy[i];
stringr[i];
i++;
}
}, 1000);
Без цикла всё работает, а с циклом нет. Что я делаю не так? |
animate(function(timePassed) {
var stringx = [];
var stringy = [];
var stringr = [];
var i = 1;
while (i<5) {
stringx[i]=window['circle00'+i].setAttributeNS(null, "cx" , X0 - timePassed*(X0 - window['X00'+i])/1000);
stringy[i]=window['circle00'+i].setAttributeNS(null, "cy" , Y0 - timePassed*(Y0 - window['Y00'+i])/1000);
stringr[i]=window['circle00'+i].setAttributeNS(null, "r" , 1 + timePassed*0.003);
stringx[i];
stringy[i];
stringr[i];
i++;
}
}, 1000);
если у вас переменные глобальные, попробуйте так. а лучше создайте объект со свойствами вместо переменных. |
Спасибо, что ответили!
Так почему-то у меня не работает. Эти элементы просто не отображаются. Для проверки запустил: alert(stringx[3]); после цикла. Значение stringx[3] выдаёт undefined. Если использовать мой вариант stringx[i]='circle00'+i+'.setAttributeNS(null, "cx" , X0 - timePassed*(X0 - X00'+i+')/1000)'; ,то знаечение stringx[3] выводиться как circle003.setAttributeNS(null, "cx" , X0 - timePassed*(X0 - X003)/1000) Но как не работала, так и не работает. Цитата:
Объектом что будет являться? |
там где у вас объявлены circle001 и X001 вместо них нужен объект
var circle = {
'1':'какое то ваше значение',
'2':'какое то ваше значение'
...
};
точно так же с X. тогда к из свойствам можно будет удобно обращаться динамически circle[i] и все будет работать. |
animate(function(timePassed) {
var stringx = [];
var stringy = [];
var stringr = [];
var i = 1;
while (i<5) {
stringx[i]=eval('circle00'+i).setAttributeNS(null, "cx" , X0 - timePassed*(X0 - eval('X00'+i))/1000);
stringy[i]=eval('circle00'+i).setAttributeNS(null, "cy" , Y0 - timePassed*(Y0 - eval('Y00'+i))/1000);
stringr[i]=eval('circle00'+i).setAttributeNS(null, "r" , 1 + timePassed*0.003);
stringx[i];
stringy[i];
stringr[i];
i++;
}
}, 1000);
можно вот так сделать, работать должно, но это не гуд. |
Да, так работает. Спасибо!!!
Цитата:
|
| Часовой пояс GMT +3, время: 01:02. |