Передать строки для работы в цикле

У меня есть этот код, который активируется при опрокидывании, развертывании и выпуске. I функции для опрокидывания и выкатывания работают, а функция выпуска нет. Я пытаюсь передать некоторые строки с URL-адресами функции в цикле.

var url1:String = "http://www.google.com";
var url2:String = "http://www.google.com";
var url3:String = "http://www.google.com";
var url4:String = "http://www.google.com";
var url5:String = "http://www.google.com";
var url6:String = "http://www.google.com";
var url7:String = "http://www.google.com";
var url8:String = "http://www.google.com";
var url9:String = "http://www.google.com";
var url10:String = "http://www.google.com";
var url11:String = "http://www.google.com";
var url12:String = "http://www.google.com";


function SetMouseAction(buttonMC, arrowMC, dynamicTF, linkURL):Void {
    trace(linkURL);
    buttonMC.colorText = dynamicTF;
    buttonMC.onRollOver = function() {
        TweenLite.to(arrowMC,0.5,{_x:"2", _alpha:50, ease:Back.easeOut});
        this.colorText.textColor = 0x7cb0b7;
    };
    buttonMC.onRollOut = function() {
        TweenLite.to(arrowMC,0.5,{_x:37, _alpha:100, ease:Back.easeOut});
        this.colorText.textColor = 0xffffff;
    };
    buttonMC.onRelease = function() {
        if (linkURL) {
            getURL(linkURL);
        }
    };
}

for (var i:Number = 1; i<=12; i++) {
    SetMouseAction(this["link"+i],this["arrow"+i],this["text"+i],url+1);
}

У меня сильное подозрение, что url+1 в цикле for неверный, но я не знаю, как это сделать.

Есть предположения?


person Sindre Sorhus    schedule 25.03.2009    source источник


Ответы (2)


var urls:Array = new Array();
urls.push("http://link1");
...
urls.push("http://link12");

function SetMouseAction(buttonMC, arrowMC, dynamicTF, linkURL):Void {
...
}

for (var i:Number = 1; i<=12; i++) {
    SetMouseAction(this["link"+i],this["arrow"+i],this["text"+i],urls[i]);
}

Убедитесь, что URL-адреса массива содержат не менее 12 элементов, иначе вы получите ошибку индекса за пределами границ.

позднее редактирование: если вам нужно извлечь URL-адреса из flashvars, просто используйте разделитель, например ",", и определите строку со всеми вашими URL-адресами, например: urlVars=url1,url2,url3,...,url12

Затем, чтобы извлечь URL-адреса и вставить их в массив, вы используете функцию разделения:

var urls:Array = new Array();
for (var i=0; i<urlVars.split(",").length; i++) urls.push(urlVars.split(",")[i]);
person evilpenguin    schedule 25.03.2009
comment
Проблема в том, что я собираюсь передать URL-адреса как FlashVars с swfObject. Любые мысли о том, как я это сделаю? - person Sindre Sorhus; 25.03.2009
comment
Я отредактировал ответ, чтобы он соответствовал вашему вопросу, пожалуйста, проверьте выше. - person evilpenguin; 25.03.2009
comment
Я не могу заставить его работать. Можешь взглянуть на мой код? HTML: pastebin.com/m50660ada ActionScript: pastebin.com/m1e0c177 - person Sindre Sorhus; 25.03.2009
comment
Похоже, ваш код actionscript не включает строки, которые я предложил в редактировании моего ответа. Пожалуйста, убедитесь, что вы дали мне ссылку на самый последний фрагмент кода, который вы написали, и убедитесь, что вы включили две строки из приведенного выше ответа. - person evilpenguin; 25.03.2009
comment
Извините, дал вам неправильную версию. Вот правильный: pastebin.com/m2f39f5f4 - person Sindre Sorhus; 25.03.2009
comment
Это просто, мой плохой. urlArray.push(urls.split(,)[i]) должен превратиться в urls.push(urls.split(,)[i]). Немного запутался при вставке кода, который я тестировал, на сайт. Дайте мне знать, как это происходит. - person evilpenguin; 25.03.2009
comment
И еще одна ошибка в именовании переменных. Я обновил две строки кода в ответе выше, убедитесь, что вы получили последние версии. - person evilpenguin; 25.03.2009
comment
Все еще не работает. Ничего не происходит, когда я нажимаю на ссылки. - person Sindre Sorhus; 25.03.2009
comment
Попробуйте отделить любые проблемы flashVars от любых других проблем. Определите строку urlVars в первой строке кода как urlVars=link1,link2,.., а затем скомпилируйте в режиме отладки, чтобы вы могли прослушивать переменные и trace() сколько угодно. Дайте мне знать, как это происходит. - person evilpenguin; 25.03.2009
comment
Что-то не так с циклом массива, потому что я пытался отследить URL-адреса после цикла, и он просто не определен. Если я отслеживаю urlVars перед циклом массива, я получаю содержимое. Есть предположения? - person Sindre Sorhus; 26.03.2009
comment
Очень странно. Я могу помочь только в том случае, если вы загрузите полный исходный код и опубликуете ссылку, я смогу просмотреть его через пару часов или около того. Однако убедитесь, что вы включили все. - person evilpenguin; 26.03.2009
comment
Зачем вообще использовать это странное 'за'? Будь проще! URL-адреса var : Array = (urlVars) ? urlVars.split(','): []; - person dragonfly; 26.03.2009
comment
Ах, великую правду вы говорите, мой друг. :) - person evilpenguin; 26.03.2009
comment
Да, это почти сработало. Вывод трассировки, который я получил, был следующим: www.2.com, www.3.com, www.4.com, www.5.com, www.6.com, www.7.com, www.8.com, www.9.com, www.10. com www.11.com www.12.com undefined Кажется, что он не получает первый. Файл проекта: drop.io/ro7ip1s. - person Sindre Sorhus; 26.03.2009
comment
Если вы найдете какие-либо другие вещи в коде, которые можно улучшить. Дай мне знать ;) - person Sindre Sorhus; 26.03.2009
comment
Теперь это имеет смысл. Видите ли, ваш for идет от 1 к длине, но для того, чтобы правильно читать из массива, вы должны перейти от 0 к длине-1. Просто измените SetMouseAction(...,urls[i]); на SetMouseAction(...,urls[i-1]); - person evilpenguin; 26.03.2009
comment
Теперь все работает. Спасибо за вашу помощь. Действительно ценю это ;) - person Sindre Sorhus; 27.03.2009

Изменить url+1 на this["url"+i]

Это заставит этот код работать. Однако вам действительно следует рассмотреть возможность использования массива с именем url с 12 элементами, а не создания 12 отдельных переменных.

person AnthonyWJones    schedule 25.03.2009