Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   XML меню аккордеон (http://www.flasher.ru/forum/showthread.php?t=157636)

vivado 08.06.2011 18:41

XML меню аккордеон
 
Всем привет,
Подскажите можно ли сделать меню типа аккардион (раскрывающееся) средствами AS 2.0 (без Tween анимации)?
Например гружу из XML Имена пунктов меню + ссылки к ним вот так.

Код AS1/AS2:

menu_xml = new XML(); // Создаём обьект XML
menu_xml.ignoreWhite = true; // Игнорируем все ненужные пробелы
// Отслеживаем загрузку xml
menu_xml.onLoad = function(ok) {        if (ok) { F_createMenu();        } }
 
menu_xml.load("menu.xml"); // Загружаем menu.xml
 
// Функцию для создания меню
F_createMenu = function () {
 
// Заводим переменную для хранения количества элементов массива
var lenMass = menu_xml.childNodes[0].childNodes.length;
 
// В цикле перебираем массив
        for (var i = 0; i<lenMass; i++) {
 
// Для каждой кнопки создаём мувик
                _root.createEmptyMovieClip("btn"+i, i);
 
// Переменная хранящая название кнопки
                var b = _root["btn"+i];
 
// Аттачим из библиотеки задний фон для кнопки
                b.attachMovie("back", "back", 1);
 
// Создаём текстовое поле для отображения названия кнопки
                b.createTextField("tf", 2, 0, 0, 200, 20);
 
// Применяем к тексту нужные параметры
                with (b.tf) {
                        selectable = false;
// Вытаскиваем из массива нужное название кнопки
                        text = menu_xml.childNodes[0].childNodes[i].attributes.menu_name;
                }
 
// Устанавливаем кнопки по вертикали друг за другом с промежутком в один пиксель
                b._y = (b._height+1)*i;
 
// Задаём для каждой кнопки ссылку для перехода по ней при нажатии
                b.link = menu_xml.childNodes[0].childNodes[i].attributes.link;
 
// Вешаем обработчик событий нажатия на кнопку
                b.onPress = function() {
                getURL(this.link, "_self"); // При нажатии переходим по ссылке
                };
        }
};

XML у меня такого типа:
PHP код:

<item menu_name="Главная" link="http://test.ru" />
<
item menu_name="Галерея" link="http://test.ru/2" />
<
item menu_name="Контакты" link="http://test.ru/3" /> 

Как можно организовать появляющееся подменю для каждого из пунктов меню, я так понимаю нужно особым способом сформировать XML и потом грузить по порядку и главное как сделать
анимацию для раскрывающегося списка подменю с помощью AS 2.0?

Была у меня идея создать отдельные XML для каждого пункта меню и грузить их по порядку но это думаю неправильно?

И пожалуйста не отправляйте меня Гуглить или Читать учебник. Лучше направьте в нужное русло подсказками.

mooncar 08.06.2011 19:03

Есть стандартный компонент Accordion (кстати, по русски все-таки правильно писать "аккордеон")
Adobe Flash, Ctrl + F7, выбираете Accordion и программно настраивайте в соответствии с вашими данными, полученными из XML.
Что и как, есть в хелпе, статья "Accordion component".

dark256 08.06.2011 20:54

http://wedding-tur.ru/

Меню-книжка с аккордеоном. рассмотрю коммерческие предложения :)

ХМЛ также содержит следующие настройки.

// speed - скорость раздвигания. Сдивгание - в 2 раза быстрее (сек)
// flipspeed - скорость перелистывания (миллисек)
// X0, Y0 - позиция первой строки осн.меню
// mainSpace - - интервал между строками осн.меню
// spacing - интервал строк субМеню
// delay - задержка перед переходом на ссылку (сек)

При желании сама листалка легко отламывается.

vivado 09.06.2011 11:12

dark256 Мне книжка эта не нужна, причем исходников подобных куча бесплатно нагуглить можно. Помоги лучше если можешь по доброте душевной, а это предложение в вакансии )))

Добавлено через 3 минуты
Цитата:

Сообщение от mooncar (Сообщение 1002151)
Есть стандартный компонент Accordion (кстати, по русски все-таки правильно писать "аккордеон")
Adobe Flash, Ctrl + F7, выбираете Accordion и программно настраивайте в соответствии с вашими данными, полученными из XML.
Что и как, есть в хелпе, статья "Accordion component".

Спасибо но я хотел, так сказать все компоненты меню сам сделать. Может знаешь как?

mooncar 09.06.2011 11:37

Не хотите готовые... Наверное тогда у вас это уже будет не "компонент" в строгом смысле, если полученный модуль не будет соответствовать определенным требованиям, предъявляемым к "компонентам", как то - переносимость, наличие пользовательских свойств и методов. Получится просто необходимая вам разработка. Ну это так, терминологическое отступление.

Готового такого у меня нет, нужно просто сесть и написать, используя весь свой опыт. :)
Единственное, что могу посоветовать, для анимаций можно использовать класс TweenLite от Greensock.

dark256 09.06.2011 11:46

Цитата:

Помоги лучше если можешь по доброте душевной
Чем тут помочь-то?
Литературным языком рассказать ВСЕ от начала и до конца?
Это малоконструктивно. Не говоря уже о том, что толку будет мало.

1. Хмл - сделайте со вложенными узлами 2-го уровня.
2. Двигать - можно так, как сказал mooncar, а можно самому по onEnterFrame
3. код на кнпках не писать.

все ;)

vivado 09.06.2011 18:56

Цитата:

Сообщение от dark256 (Сообщение 1002297)
Чем тут помочь-то?
Литературным языком рассказать ВСЕ от начала и до конца?
Это малоконструктивно. Не говоря уже о том, что толку будет мало.

1. Хмл - сделайте со вложенными узлами 2-го уровня.
2. Двигать - можно так, как сказал mooncar, а можно самому по onEnterFrame
3. код на кнпках не писать.

все ;)

Ну почему же малоконструктивно и толку мало? Я не прошу все сделать за меня, я прошу помочь освоить мне AS, не думайте что я сижу и нифига не делаю и не пытаюсь...

1. Насчет сделать XML с вложенными узлами я не смог прописать условие по которому будут извлекаться подменюшки. Единственное до чего пока допер это сделал XML с узлами 1 уровня но прописал параметр показывающий что это пункт меню или пункт подменю (при pmenu="0" - меню при pmenu="1" - подменю)... В подменю прописал переменную которая говорит к какому пункту меню енто подменю относится (NumMenu). Примерно так.

PHP код:

<all_menu>
<
menu name="Меню 0" url="" NumMenu="0" pmenu="0"/>
<
menu name="Меню 1" url="" NumMenu="1" pmenu="0"/>
<
menu name="Меню 2" url="" NumMenu="2" pmenu="0"/>

<
menu name="Подменю 1" url="" NumMenu="0" pmenu="1"/>
<
menu name="Подменю 2" url="" NumMenu="0" pmenu="1"/>
<
menu name="Подменю 3" url="" NumMenu="0" pmenu="1"/>
</
all_menu

Дальше планирую Дублировать ролики для Меню и Подменю в зависимости от переменных, как прогу напишу так пришлю на критику, мож подскажите как лучше дальше будет делать. :)

mooncar 09.06.2011 19:30

Неверный подход к XML...
Много избыточного и вы совершенно не используете вложенность узлов, отражая ею структуру меню. Теряется сам смысл XML.
Например, нет необходимости указывать, к какому меню относится подменю. Это и так следует из структуры XML.
Так лучше:
Код:

<?xml version="1.0" encoding="utf-8"?>
<all_menu>
        <menu id="1" url="" name="Меню 1">
                <submenu id="1" url="" name=""/>
                <submenu id="2" url="" name=""/>
                <submenu id="3" url="" name=""/>
        </menu>
        <menu id="2" url="" name="Меню 2">
                <submenu id="1" url="" name=""/>
                <submenu id="2" url="" name=""/>
                <submenu id="3" url="" name=""/>
        </menu>
        <menu id="3" url="" name="Меню 3">
                <submenu id="1" url="" name=""/>
                <submenu id="2" url="" name=""/>
                <submenu id="3" url="" name=""/>
        </menu>       
</all_menu>

Если проблемы это распарсить, это понятно, напишите об этом.

dark256 09.06.2011 20:48

во. именно. далее читаем про childNodes

vivado 10.06.2011 11:38

Цитата:

Сообщение от mooncar (Сообщение 1002471)
Неверный подход к XML...
Много избыточного и вы совершенно не используете вложенность узлов, отражая ею структуру меню. Теряется сам смысл XML.
Например, нет необходимости указывать, к какому меню относится подменю. Это и так следует из структуры XML.
Так лучше:
Код:

<?xml version="1.0" encoding="utf-8"?>
<all_menu>
        <menu id="1" url="" name="Меню 1">
                <submenu id="1" url="" name=""/>
                <submenu id="2" url="" name=""/>
                <submenu id="3" url="" name=""/>
        </menu>
        <menu id="2" url="" name="Меню 2">
                <submenu id="1" url="" name=""/>
                <submenu id="2" url="" name=""/>
                <submenu id="3" url="" name=""/>
        </menu>
        <menu id="3" url="" name="Меню 3">
                <submenu id="1" url="" name=""/>
                <submenu id="2" url="" name=""/>
                <submenu id="3" url="" name=""/>
        </menu>       
</all_menu>

Если проблемы это распарсить, это понятно, напишите об этом.

Да вы правы так намного красивее, и действительно теперь проблемы с распарсить возникли (((

Цитата:

Сообщение от dark256 (Сообщение 1002489)
во. именно. далее читаем про childNodes

Про childNodes почитал, со своей XML делал так
Код AS1/AS2:

MenuName = menu.firstChild.attributes.name;

а в "правильном" XML я так понимаю нужно
делать примерно так

Код AS1/AS2:

//Для главных менюшек
idMenu = menu.firstChild.attributes.id;
MenuName = menu.firstChild.attributes.name;
//Для подменюшек
idMenu = menu.firstChild.ChildNodes.attributes.id;
MenuName = menu.firstChild.ChildNodes.attributes.name;

Или так неправильно делать, лучше в массив и циклом грузить? Но тогда чето пока я не понимаю как из массива все доставать по id.


Часовой пояс GMT +4, время: 18:21.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.