| 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:
|