![]() |
|
||||||||||
|
|||||
|
Модрон-ветеринар
|
Для вышеприведенного XML загрузка и парсинг:
var configXmlPath:String = '';//URL конфигурационного XML var xmlData:XML = new XML(); xmlData.ignoreWhite = true; xmlData.onLoad = loadXML; xmlData.load(configXmlPath); function loadXML (success:Boolean) { if (success) { var xmlNode:XMLNode = this.firstChild ; //для сокращения записи var amountMenu:Number = xmlNode.childNodes.length ; for (i = 0; i < amountMenu; i++) { var menuId:Number = parseInt(xmlNode.childNodes[i].attributes['id']); var menuName:Number = xmlNode.childNodes[i].attributes['name']; var amountSubmenu:Number = xmlNode.childNodes[i].childNodes.length ; for (j = 0; j < amountSubmenu; j++) { var submenuId:Number = parseInt(xmlNode.childNodes[i].childNodes[j].attributes['id']); var submenuName:Number = xmlNode.childNodes[i].childNodes[j].attributes['name']; } } } } 2. Что и когда делать с полученными данными - тоже на ваше усмотрение: можно в цикле загонять в многомерные массивы для последующего использования (правда это тоже избыточно, ведь экземпляр XML с полученными данными - это тоже своего рода массив, по ходу прямо его и использовать), а можно тут же и использовать даннные, в процессе парсинга. 3. parseInt для id - ну это чтобы как-то вычислять можно было, например, или для удобства создания и использования многомерного массива, чтобы по номерным индексам обращаться к элементам, причем эти индексы были бы равны id. Факультативно, можете убрать это приведение к числу. 4. Запись вида attributes['name'] - я так привык просто, строковое имя атрибута выделяется лучше в редакторе кода.
__________________
Идите первым! Последний раз редактировалось mooncar; 10.06.2011 в 12:49. |
|
|||||
|
Регистрация: Aug 2010
Сообщений: 282
|
Всем привет. Спасибо за помощь. Благодаря вам кое что начинает получаться.
xn=162; //Начальные координаты меню по X yn=210; //Начальные координаты меню по Y xrast=78; //расстояние между пунктами меню по X yrast=15; ////расстояние между пунктами меню по Y var configXmlPath:String = 'menu_horizontal.xml';//URL конфигурационного XML var xmlData:XML = new XML(); //Создаем переменную xmlData.ignoreWhite = true; xmlData.onLoad = loadXML; xmlData.load(configXmlPath); function loadXML (success:Boolean){ if (success){ var xmlNode:XMLNode = this.firstChild ; //для сокращения записи //Переменная колличества пунктов меню var amountMenu:Number = xmlNode.childNodes.length; for (i = 0; i < amountMenu; i++){ //Считываем ID для подменю var MenuId:Number = parseInt(xmlNode.childNodes[i].attributes['id']); //Считываем Url для меню var MenuUrl:Number = xmlNode.childNodes[i].attributes['url']; //Считываем Имя для меню var MenuName:Number = xmlNode.childNodes[i].attributes['name']; //Прикрепляем мувик Меню из библиотеки _root.attachMovie("Menu","Menu"+MenuId,MenuId); //Задаем координаты по x и y для мувика _root["Menu"+MenuId]._x = xn+xrast*MenuId; _root["Menu"+MenuId]._y = yn; //Загружаем переменные Имя Меню и Url _root["Menu"+MenuId].txt_menu = MenuName; _root["Menu"+MenuId].url_menu = MenuUrl; //Переменная колличества пунктов подменю var amountSubmenu:Number = xmlNode.childNodes[i].childNodes.length; for (j = 0; j < amountSubmenu; j++) { //Считываем ID для подменю var SubmenuId:Number = parseInt(xmlNode.childNodes[i].childNodes[j].attributes['id']); //Считываем Url для подменю var SubmenuUrl:Number = xmlNode.childNodes[i].childNodes[j].attributes['url']; //Считываем Имя для подменю var SubmenuName:Number = xmlNode.childNodes[i].childNodes[j].attributes['name']; //Прикрепляем мувик Подменю из библиотеки _root["Menu"+MenuId].attachMovie("SubMenu","SubMenu"+SubmenuId,SubmenuId); //Задаем координаты по x и y для мувика _root["Menu"+MenuId]["SubMenu"+SubmenuId]._x = 0; _root["Menu"+MenuId]["SubMenu"+SubmenuId]._y = _root["Menu"+MenuId]._y/yn+15+yrast*SubmenuId; //Загружаем переменные Имя Подменю и Url _root["Menu"+MenuId]["SubMenu"+SubmenuId].url_submenu = SubmenuUrl; _root["Menu"+MenuId]["SubMenu"+SubmenuId].txt_submenu = SubmenuName; } } } } Думаю сделать это так. Способ 1. Аттачить мувики Подменюшек в отдельный мувик (например в какой-нибудь listSubMenu) расположенный в мувике пунктов Меню, который по умолчанию будет скрыт (_visible=false) а потом на пункт Меню повесить: Способ 2. Писать условие для каждого из главных пунктов меню, чтото типа if (MenuId=="0"){ _root["Menu"+MenuId].onRollOver = function() { listSubMenu.gotoAndPress(1); //отображаем подменю для Меню 0 }; if (MenuId=="1"){ _root["Menu"+MenuId].onRollOver = function() { listSubMenu.gotoAndPress(2); //отображаем подменю для Меню 1 }; //и т.д. Вот ссылка на текущий исходник.menu Последний раз редактировалось vivado; 14.06.2011 в 14:51. |
|
|||||
|
Спрашивать "как лучше" - не имеет ровно никакого смысла. Ибо вам тут сейчас предложат 100 вариантов и вы утонете во вводных.
Надо просто сесть и делать. На это может уйти час, день, неделя, месяц. В любом случае чужой опыт Вам не пригодится. Каждый сам, лично должен наступить на все грабли, чтобы ориентироваться в процессе в дальнейшем. |
|
|||||
|
Регистрация: Aug 2010
Сообщений: 282
|
Цитата:
Задача 1 решена, меню парсится из xml и все данные грузятся. Приступил к тому о чем собственно тема, к созданию вертикального разъезжающегося меню (а ля аккордеон). Мучаюсь над написанием функции которая будет "раздвигать" менюшки. Сново взываю о помощи ))) Итак я вижу это так в функцию должны передаваться 1. Имя "активного" меню 2. Кол-во пунктов подменю этого меню (чтоб знать на сколько опустить/поднять ниже расположенные пункты меню Добавлено через 23 часа 23 минуты Сломал мозг слегка но что то родилось, правда опять как то криво работает ((( function SlideMenu(NumSelectedMenu,NumPodmenu){ //Раздвигает пункты меню NumPodmenu=NumPodmenu/3; //Так надо не обращайте внимания ))) trace("Номер выбранного меню "+NumSelectedMenu+" в нем подменю "+NumPodmenu+" Всего пунктов меню "+PunktovMenuVsego); hpodmenu=20; //высота пункта подменю if (NumSelectedMenu<PunktovMenuVsego){ //Если Номер выбранной менюшки меньше чем всего менюшек MoveMenuStart = NumSelectedMenu; //Первое меню под активным _root["Menu"+MoveMenuStart]._y=NumPodmenu*hpodmenu; //Сдвигаем вниз первое меню под активным trace ("Опускаем Menu "+MoveMenuStart); } OtherDownMenu=MoveMenuStart+1; for ( r = OtherDownMenu; OtherDownMenu<PunktovMenuVsego; r++){ //Опускаем остальные менюшки i++; _root["Menu"+r]._y=_root["Menu"+MoveMenuStart]._y+hpodmenu*i; trace ("Опускаем Menu "+OtherDownMenu); OtherDownMenu++; //к следующей менюшке } } Вот исходник Меню Последний раз редактировалось vivado; 15.06.2011 в 16:03. |
|
|||||
|
Регистрация: Jun 2011
Сообщений: 1
|
А зачем вводить переменную?
|
|
|||||
|
Регистрация: Aug 2010
Сообщений: 282
|
Цитата:
Вот так будет лучше. function SlideMenu(NumSelectedMenu,NumPodmenu){ //Раздвигает пункты меню NumPodmenu=NumPodmenu/3; //Так надо не обращайте внимания ))) trace("Номер выбранного меню "+NumSelectedMenu+" в нем подменю "+NumPodmenu+" Всего пунктов меню "+PunktovMenuVsego); hpodmenu=23; //высота пункта подменю MoveMenuStart = NumSelectedMenu+1; //Первое меню под активным //OtherDownMenu=MoveMenuStart+1; for ( r = MoveMenuStart; r<PunktovMenuVsego; r++){ //Опускаем остальные менюшки _root["Menu"+r]._y=_root["Menu"+NumSelectedMenu]._y+hpodmenu*i; trace ("Опускаем Menu "+r); i++; } } Добавлено через 2 часа 19 минут УРА У МЕНЯ ВСЕ ПОЛУЧИЛОСЬ! Вертикальное и горизонтальное XML меню на AS 2.0 готово! МОжет конечно код кривоват + кое-где он размещен на мувиках (знаю, знаю, что это плохо, но не смог сделать по другому) но в конце концов все работает и я счастлив ))) Выкладываю работающие исходники, может кому пригодится. Горизонтальное и вертикальное XML меню Последний раз редактировалось vivado; 16.06.2011 в 15:26. |
![]() |
![]() |
Часовой пояс GMT +4, время: 18:22. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| xml аккордион , xml меню , аккордион меню , раскрывающееся меню |
|
|