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. ФУНКЦИЯ ЗАКРЫТИЯ ПАПКИ |