Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #27, ФЕВРАЛЬ 2003 г.

FLASH, И ГОТОВО! Красивое меню-трансформер

Iv (dembicki@narod.ru)

Спецвыпуск Xakep, номер #027, стр. 027-066-5


Если мне не удалось тебя усыпить разглагольствованиями о классах, то давай снесем подсветку текста папки синим цветом (функцию f_tmp.onRollOver), если тебе она не нравится, и приступим к организации перехода по страницам:

i_tmp.onRelease = function() {

getURL(_root.input_xml[this.i].attributes.url, "mainFrame");

this._parent.released_item.icon.gotoAndStop(1);

this.icon.gotoAndStop(2);

this._parent.released_item = this;

};

Не слишком сложно? Мы взяли url странички из xml, обратившись к атрибуту соответствующего узла xml, а узел нашли по его ID. Затем в ранее кликнутом элементе иконку отправляем на первый кадр (если это первый клик, то никого никуда не отправляем). Иконку текущего мувика отправляем на второй кадр и следующей строкой скрипта сохраним линк на текущий мувик как на кликнутый мувик.

Тестани. Кликни на элемент дерева, но не на папку. Браузер наругается - скажешь "OK", он и откроется. И будет прав, если у тебя нет в той же папке нужного хытымыля.

Чтобы это не повторялось, закомментируй строку вызова URL до лучших времен. Раскомментируешь, когда создашь странички. Теперь нужно организовать открытие и закрытие папок.

f_tmp.onRelease = function() {

if (this.icon._currentframe-1) {

this.icon.gotoAndStop(1);

this.openFolder();

} else {

this.icon.gotoAndStop(2);

this.closeFolder();

}

};

Можно опять тестануть.

РАЗДВИНЕМ ДЕРЕВО

Естественно, тест не даст никаких результатов кроме изменения иконок при клике. Это происходит по совершенно очевидной причине: не заданы функции открытия и закрытия папок. Это самая замороченная часть менюхи, но я советую тебе в ней разобраться, а я постараюсь помочь.

f_tmp.closeFolder = function(folder_only) {

var old_mc, mc;

var i_xml = _root.input_xml;

var i = this.i;

var tab = i_xml[i].attributes.tab;

while (i_xml[++i].attributes.tab>tab) {

mc = i_xml[i].attributes.mc;

mc._visible = mc._y=0;

}

if (folder_only) {

return i;

}

mc = this;

while (i_xml[i].attributes.mc) {

old_mc = mc;

mc = i_xml[i++].attributes.mc;

mc._y = old_mc._y+20;

}

};

f_tmp.openFolder = function() {

var old_mc, mc, nod, atr;

var i_xml = _root.input_xml;

var i = this.i;

mc = this;

while (i_xml[++i].attributes.tab>tab) {

nod = i_xml[i];

atr = nod.attributes;

old_mc = mc;

if (nod.nodeName.toUpperCase() == "FOLDER") {

if (atr.mc.icon._currentframe == 2) {

atr.mc._y = old_mc._y+20;

old_mc = atr.mc;

atr.mc._visible = 1;

i = atr.mc.closeFolder(1);

}

}

mc = i_xml[i].attributes.mc;

mc._visible = 1;

mc._y = old_mc._y+20;

}

var r = i;

while (mc) {

old_mc = mc;

mc = i_xml[++i].attributes.mc;

mc._y = old_mc._y+20;

}

};

Итак, тестани - меню должно работать как часы. Если найдешь баг, шли мне на мыло. Давай разбираться, как это работает.

Во-первых, функции closeFolder и openFolder создаем в прототипе папки. Линк на этот прототип - f_tmp.

ФУНКЦИЯ ЗАКРЫТИЯ ПАПКИ

Назад на стр. 027-066-4  Содержание  Вперед на стр. 027-066-6