Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Выравнивание элементов выпадающего списка! (http://www.flasher.ru/forum/showthread.php?t=141971)

Universe 09.07.2010 01:41

Выравнивание элементов выпадающего списка!
 
Вложений: 1
Всем здравствуйте!
Пытаюсь сделать выпадающий список как здесь http://subaru.com.ua/modelline/legacy_exterior360.html (выпадающий список в шапке)
Требования которые я перед собой ставлю:
- Весь текст должен грузится из xml
- При добавлении пунктов в xml это должно отражаться на кол-ве пунктов в флешке.
- При добавлении имён разной длины все поля автоматически выравниваются
Столкнулся с 2мя проблемами:
1. НЕ получается реализовать автоматическое выравнивание полей второго уровня таким образом, чтобы они не налезали друг на друга! Вся загвостка в том что они не просто так в одну строчку, а в две! Подскажите алгоритм который бы позволил их выровнять, плиз!
2. Как правильно удалить выпадающие ссылки при убирании мыши? Я пробую убирать главный контейнер, но при повторном наведении ссылки начинают дублироваться!
Вот код:
Код AS3:

var xml:XML;
var mainLink_txt:TextField;
var subLinks_txt:TextField;
var mainLink_mc:Sprite;
var subLink_mc:Sprite;
var subLinkContainer_mc:Sprite = new Sprite();
var xmlLoader:URLLoader = new URLLoader();
var upSubLinks_arr:Array = new Array();
var downSubLinks_arr:Array = new Array();
 
xmlLoader.load(new URLRequest("headerLinks.xml"));
 
xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
 
var myLink:String = "www.google.com";
var myName:String = "google";
 
 
function xmlLoaded(e:Event):void
{
        //trace(e.target.data);
        xml = new XML(e.target.data);
        placeMainLinks("top");
 
        placeMainLinks("bottom");
}
 
function clearSubLinks(e:MouseEvent):void
{
        var childsNum:uint;
                if(subLink_mc.parent.numChildren > 0)
                {
                        childsNum = subLink_mc.parent.numChildren;
                        trace("childsNum " + childsNum);
                        for(var i:uint; i < childsNum; i++)
                        {
                                subLink_mc.parent.removeChild(subLink_mc.parent.getChildAt(0));
                        }
                }
 
                trace("LINKS REMOVED");
                upSubLinks.visible = false;
                downSubLinks.visible = false;
}
 
subLinkContainer_mc.x = 100;
var myFormat:TextFormat = new TextFormat();
                myFormat.font = "Arial";
                myFormat.size = 12;
                myFormat.color = 0x000000;
                myFormat.italic = false;
                myFormat.bold = true;
                myFormat.align = TextFormatAlign.JUSTIFY;
 
upSubLinks.visible = false;
downSubLinks.visible = false;
 
function placeMainLinks(level:String):void
{
        var xmlLevel:XMLList;
        var linkHolder:MovieClip;
        var distanceX:Number = 0;
 
        if(level == "top")
        {
                xmlLevel = xml.topLinks.link;
                linkHolder = upMainLinks;
 
        }
        else if(level == "bottom")
        {
                xmlLevel = xml.bottomLinks.link;
                linkHolder = downMainLinks;
        }
        for(var i:uint; i< xmlLevel.length(); i++)
        {
                mainLink_txt =  new TextField();
                mainLink_mc = new Sprite();
                mainLink_mc.name =String(i);
                mainLink_txt.htmlText = "<a href='" + xmlLevel[i].@url + "' >" + xmlLevel[i].@name + "</a>";
                mainLink_txt.setTextFormat(myFormat);
                mainLink_txt.selectable = false;
                mainLink_txt.autoSize = TextFieldAutoSize.LEFT;
                mainLink_txt.antiAliasType = flash.text.AntiAliasType.NORMAL;
                mainLink_txt.border = false;
                mainLink_mc.addChild(mainLink_txt);
                linkHolder.addChild(mainLink_mc);
                mainLink_mc.x =        distanceX;
                distanceX +=  mainLink_txt.width + 15;
                mainLink_mc.addEventListener(MouseEvent.ROLL_OVER, rollMainLink);
        }
}
 
function placeSubLinks(level:String, number:String):void
{
        var  xmlSubLevel:XMLList;
        var subLinkHolder:Sprite;
 
        trace("NUMBER " + number);
        if(level == "top")
        {
                xmlSubLevel = xml.topLinks.link[uint(number)].sublink;
                subLinkHolder = upSubLinks;
                trace("LENGTH " + xmlSubLevel)
        }
        else if(level == "bottom")
        {
                xmlSubLevel = xml.bottomLinks.link[0].sublink;
                subLinkHolder = downSubLinks;
        }
        trace("xmlSubLevel.length()" + xmlSubLevel.@name);
 
        for(var i:uint; i < xmlSubLevel.length(); i++)
        {
                subLinks_txt =  new TextField();
                subLink_mc = new Sprite();
                subLinks_txt.htmlText = "<a href='" + xmlSubLevel[i].@url + "' >" + xmlSubLevel[i].@name + "</a>";;
                subLinks_txt.setTextFormat(myFormat);
                subLinks_txt.selectable = false;
                subLinks_txt.autoSize = TextFieldAutoSize.LEFT;
                subLinks_txt.antiAliasType = flash.text.AntiAliasType.NORMAL;
                subLinks_txt.embedFonts = true;
                subLinks_txt.border = false;
                subLinks_txt.name = "subLink_txt" + i;
                subLink_mc.buttonMode = true;
                subLink_mc.addChild(subLinks_txt);
                subLink_mc.name = "subLink" + i;
                subLinkContainer_mc.addChild(subLink_mc);
                subLinkContainer_mc.name = "subLinksContainer" + i;
                subLinkHolder.addChild(subLinkContainer_mc);
                if(i%2 == 0)
                {
                        subLink_mc.y = 0;
                        subLink_mc.x = i * 50;
                }
                else
                {
                        subLink_mc.y = subLink_mc.height;
                        subLink_mc.x = (i-1) * 50 ;
                }
        }
        subLinkHolder.addEventListener(MouseEvent.ROLL_OUT, clearSubLinks);
}
 
function rollMainLink(e:MouseEvent):void
{
        trace("TARGET " + e.target.name);
        if(e.target.parent.name == "upMainLinks")
        {
                upSubLinks.visible = true;
 
                placeSubLinks("top", e.target.name);
        }
        else if(e.target.parent.name == "downMainLinks")
        {
                downSubLinks.visible = true;
                placeSubLinks("bottom", e.target.name);
        }
        subLinkContainer_mc.x = e.target.x;
        trace(e.target.name);
        //e.target.addEventListener(MouseEvent.ROLL_OUT, rollOutMainLink);
 
}
 
function rollOutMainLink(e:MouseEvent):void
{
        trace(e.target.parent.name);
        if(e.target.parent.name == "upMainLinks")
        {
                upSubLinks.visible = false;
                //clearSubLinks();
        }
        else if(e.target.parent.name == "downMainLinks")
        {
                downSubLinks.visible = false;
        }
}

Вот сам проект вместе с xml:

AlexDesinger 09.07.2010 11:15

2 . вы сума сошли их удалять? Только хайдить и дизайблить, еще лучше с анимацией, удалять не стоит.
1. Насчет выравнивания ничего не понял - по-моему все ровно, только все накладывается друг на друга из предыдущих менюшек.

Universe 14.07.2010 15:19

Ни с чего я не сошёл! А как вы без удаления этих объектов реализуете их смену?
Если их просто прятать - информация в выпадающих менюшках обновляться не будет!
Предлагаете создавать сразу все выпадающие мею из xml и показывать их при наведении на определённый пункт?

Хемуль 14.07.2010 15:22

2 Universe:
Цитата:

Если их просто прятать - информация в выпадающих менюшках обновляться не будет!
Какая информация? о_0


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

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