Ruby
%Europe/Berlin %773 %2005, 19:34
Beste Flashers,
Ik weet dat het niet de bedoeling is om hele lappen code ter controle aan te bieden, maar ik kan mijn eigen fout echt niet vinden. Bij de submenus laat hij slechts de laatste menuitems en de rest vergeet hij 8-).
Ik heb namelijk een xml menutje met submenus gemaakt, nu heb ik al gecontroleerd of hij alles wel goed in de objecten en arrays zet en daar is niks mis mee. (gelukkig :O)
Het probleem zit hem in de opbouw van het menu, zie functie 'buildMenu'.
Hier komt de code:
stop();
var mitems:Array = new Array();
var mcmenu:Array = new Array();
var tmc:Array = new Array();
var xml:XML = new XML();
var begin:Number = 177;
var startalpha:Number = 40;
var intID:Number;
var currentSubmenu:Number = 0;
var link:String;
_root.onLoad = function()
{
xml.load("menu.xml");
xml.ignoreWhite = true;
xml.onLoad = function(success:Boolean)
{
if(success)
{
parseXML();
buildMenu();
}
}
}
/* Structure :
Array ( [0] => Object ( naam: home, link: index.html ),
[1] => Object ( naam: over mij, items: Array ( Object ( naam: subitem, link: sublink.html ),
etc.
)
)
*/
function parseXML(Void):Void
{
var rNodes:Array = xml.firstChild.childNodes;
for(var i:Number=0;i<rNodes.length;i++)
{
if(rNodes[i].nodeName == "menuitem")
{
if(rNodes[i].attributes.name == null)
{
var o:Object = new Object();
o.naam = rNodes[i].childNodes[0].firstChild.nodeValue;
o.link = rNodes[i].childNodes[1].firstChild.nodeValue;
mitems[i] = o;
}
else
{
var ro:Object = new Object;
var sub:Array = new Array();
ro.naam = rNodes[i].attributes.name;
var it:Array = rNodes[i].childNodes;
for(var j:Number = 0;j<it.length;j++)
{
var o:Object = new Object();
o.naam = it[j].childNodes[0].firstChild.nodeValue;
o.link = it[j].childNodes[1].firstChild.nodeValue;
sub[j] = o;
}
ro.items = sub;
mitems[i] = ro;
}
}
}
//trace(mitems[1].items[0].naam);
//trace(mitems[1].items[1].naam);
//trace(mitems[1].items[2].naam);
}
//probleem ligt niet in de structuur maar in de menu opbouw
function buildMenu(Void):Void
{
for(var i:Number=0;i<mitems.length;i++)
{
//Als er geen submenu items zijn
if(mitems[i].link != null)
{
mcmenu[i] = _root.attachMovie("menu","menu_"+i,_root.getNextHighestDepth());
mcmenu[i]._y = begin;
mcmenu[i]._x = i*140;
mcmenu[i]._x += 40;
mcmenu[i].background._alpha = startalpha;
mcmenu[i].textfield.menutext.text = mitems[i].naam;
mcmenu[i].onRollOver = function()
{
easeUp(this,null);
}
mcmenu[i].onRollOut = function()
{
easeDown(this,null);
}
mcmenu[i].onRelease = function()
{
getURL(mitems.link,"_parent");
}
}
if(mitems[i].items != null)
{
mcmenu[i] = _root.attachMovie("menu","menu_"+i,_root.getNextHighestDepth());
mcmenu[i]._y = begin;
mcmenu[i]._x = i*140;
mcmenu[i]._x += 40;
mcmenu[i].background._alpha = startalpha;
mcmenu[i].textfield.menutext.text = mitems[i].naam;
tmc[currentSubmenu] = mcmenu[i].createEmptyMovieClip("sub",_root.getNextHighestDepth());
tmc[currentSubmenu]._visible = false;
var l:Number = mitems[i].items.length;
for(var j:Number=0;j<l;j++)
{
mcmenu[i][j] = tmc[currentSubmenu].attachMovie("submenu",mitems[i].items[j].naam,_root.getNextHighestDepth());
trace(mcmenu[i][j]);
mcmenu[i][j]._y -= (j * mcmenu[i][j]._height);
mcmenu[i][j]._y -= mcmenu[i][j]._height;
//mcmenu[i][j]._y = -30;
mcmenu[i][j]._alpha = 40;
mcmenu[i][j]._x = 0;
mcmenu[i][j].textfield.menutext.text = mitems[i].items[j].naam;
curLink = mitems[i].items[j].link;
mcmenu[i][j].onRelease = function()
{
trace(curLink);
getURL(curLink,"_parent");
}
}
/*
tmc[currentSubmenu].onEnterFrame = function()
{
if(intID == null) easeOut(this);
else easeIn(this);
}
*/
mcmenu[i].onRollOver = function()
{
easeUp(this,true);
}
mcmenu[i].onRollOut = function()
{
easeDown(this,true);
}
mcmenu[i].onRelease = function()
{
getURL(mitems.link,"_parent");
}
currentSubmenu++;
}
}
}
function easeIn(mc:MovieClip):Void
{
new mx.transitions.Tween(mc, "_alpha", mx.transitions.easing.Back.easeOut, mc._alpha, 80, 10);
}
function easeOut(mc:MovieClip):Void
{
new mx.transitions.Tween(mc, "_alpha", mx.transitions.easing.Back.easeOut, mc._alpha, 0, 10);
}
function easeUp(mc:MovieClip,sm:Boolean):Void
{
new mx.transitions.Tween(mc.textfield, "_alpha", mx.transitions.easing.Strong.easeIn, mc.textfield._alpha, 80, 5);
if(!sm)
{
new mx.transitions.Tween(mc.background, "_y", mx.transitions.easing.Back.easeOut, mc.background._y, -10, 10);
new mx.transitions.Tween(mc.background, "_alpha", mx.transitions.easing.Strong.easeIn, mc.background._alpha, 100, 6);
}
else
{
mc.sub._visible = true;
mc.sub._alpha = 100;
//new mx.transitions.Tween(submc, "_alpha", mx.transitions.easing.Back.easeOut, submc._alpha, 100, 10);
//if(intID == null) sleep(2.5);
}
}
function easeDown(mc:MovieClip,sm:Boolean):Void
{
new mx.transitions.Tween(mc.textfield, "_alpha", mx.transitions.easing.Strong.easeIn, mc.textfield._alpha, 100, 5);
if(!sm)
{
new mx.transitions.Tween(mc.background, "_y", mx.transitions.easing.Strong.easeIn, mc.background._y, 0, 10);
new mx.transitions.Tween(mc.background, "_alpha", mx.transitions.easing.Strong.easeIn, mc.background._alpha, startalpha, 10);
}
else
{
//mc.sub._visible = false;
//mc.sub._alpha = 0;
//new mx.transitions.Tween(submc, "_alpha", mx.transitions.easing.Back.easeOut, submc._alpha, 0, 10);
}
}
function sleep(seconds)
{
intID = setInterval(function() { clearInterval(intID);intID=null; },seconds*1000);
}
En dit is het xml bestand:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<navigation>
<menuitem>
<text>Home</text>
<link>index.php</link>
</menuitem>
<menuitem name="Over mij">
<item>
<text>Ik</text>
<link><![CDATA[index.php?pid=1&sid=0]]></link>
</item>
<item>
<text>CV</text>
<link><![CDATA[index.php?pid=1&sid=1]]></link>
</item>
<item>
<text>Foto's</text>
<link><![CDATA[index.php?pid=1&sid=2]]></link>
</item>
</menuitem>
<menuitem name="Werk">
<item>
<text>Portfolio</text>
<link><![CDATA[index.php?pid=0&sid=0]]></link>
</item>
<item>
<text>Experimenten</text>
<link><![CDATA[index.php?pid=0&sid=1]]></link>
</item>
</menuitem>
<menuitem>
<text>Contact</text>
<link><![CDATA[index.php?pid=2]]></link>
</menuitem>
</navigation>
De fla (http://145.89.191.230/~rubendegooijer/header.fla)
De swf (http://145.89.191.230/~rubendegooijer/header.swf)
Ik hoop dat iemand de moeite wil nemen om te kijken wat er mogelijk aan de hand is. Bedankt!!!!!
Groetjes,
Ruben de Gooijer
Ik weet dat het niet de bedoeling is om hele lappen code ter controle aan te bieden, maar ik kan mijn eigen fout echt niet vinden. Bij de submenus laat hij slechts de laatste menuitems en de rest vergeet hij 8-).
Ik heb namelijk een xml menutje met submenus gemaakt, nu heb ik al gecontroleerd of hij alles wel goed in de objecten en arrays zet en daar is niks mis mee. (gelukkig :O)
Het probleem zit hem in de opbouw van het menu, zie functie 'buildMenu'.
Hier komt de code:
stop();
var mitems:Array = new Array();
var mcmenu:Array = new Array();
var tmc:Array = new Array();
var xml:XML = new XML();
var begin:Number = 177;
var startalpha:Number = 40;
var intID:Number;
var currentSubmenu:Number = 0;
var link:String;
_root.onLoad = function()
{
xml.load("menu.xml");
xml.ignoreWhite = true;
xml.onLoad = function(success:Boolean)
{
if(success)
{
parseXML();
buildMenu();
}
}
}
/* Structure :
Array ( [0] => Object ( naam: home, link: index.html ),
[1] => Object ( naam: over mij, items: Array ( Object ( naam: subitem, link: sublink.html ),
etc.
)
)
*/
function parseXML(Void):Void
{
var rNodes:Array = xml.firstChild.childNodes;
for(var i:Number=0;i<rNodes.length;i++)
{
if(rNodes[i].nodeName == "menuitem")
{
if(rNodes[i].attributes.name == null)
{
var o:Object = new Object();
o.naam = rNodes[i].childNodes[0].firstChild.nodeValue;
o.link = rNodes[i].childNodes[1].firstChild.nodeValue;
mitems[i] = o;
}
else
{
var ro:Object = new Object;
var sub:Array = new Array();
ro.naam = rNodes[i].attributes.name;
var it:Array = rNodes[i].childNodes;
for(var j:Number = 0;j<it.length;j++)
{
var o:Object = new Object();
o.naam = it[j].childNodes[0].firstChild.nodeValue;
o.link = it[j].childNodes[1].firstChild.nodeValue;
sub[j] = o;
}
ro.items = sub;
mitems[i] = ro;
}
}
}
//trace(mitems[1].items[0].naam);
//trace(mitems[1].items[1].naam);
//trace(mitems[1].items[2].naam);
}
//probleem ligt niet in de structuur maar in de menu opbouw
function buildMenu(Void):Void
{
for(var i:Number=0;i<mitems.length;i++)
{
//Als er geen submenu items zijn
if(mitems[i].link != null)
{
mcmenu[i] = _root.attachMovie("menu","menu_"+i,_root.getNextHighestDepth());
mcmenu[i]._y = begin;
mcmenu[i]._x = i*140;
mcmenu[i]._x += 40;
mcmenu[i].background._alpha = startalpha;
mcmenu[i].textfield.menutext.text = mitems[i].naam;
mcmenu[i].onRollOver = function()
{
easeUp(this,null);
}
mcmenu[i].onRollOut = function()
{
easeDown(this,null);
}
mcmenu[i].onRelease = function()
{
getURL(mitems.link,"_parent");
}
}
if(mitems[i].items != null)
{
mcmenu[i] = _root.attachMovie("menu","menu_"+i,_root.getNextHighestDepth());
mcmenu[i]._y = begin;
mcmenu[i]._x = i*140;
mcmenu[i]._x += 40;
mcmenu[i].background._alpha = startalpha;
mcmenu[i].textfield.menutext.text = mitems[i].naam;
tmc[currentSubmenu] = mcmenu[i].createEmptyMovieClip("sub",_root.getNextHighestDepth());
tmc[currentSubmenu]._visible = false;
var l:Number = mitems[i].items.length;
for(var j:Number=0;j<l;j++)
{
mcmenu[i][j] = tmc[currentSubmenu].attachMovie("submenu",mitems[i].items[j].naam,_root.getNextHighestDepth());
trace(mcmenu[i][j]);
mcmenu[i][j]._y -= (j * mcmenu[i][j]._height);
mcmenu[i][j]._y -= mcmenu[i][j]._height;
//mcmenu[i][j]._y = -30;
mcmenu[i][j]._alpha = 40;
mcmenu[i][j]._x = 0;
mcmenu[i][j].textfield.menutext.text = mitems[i].items[j].naam;
curLink = mitems[i].items[j].link;
mcmenu[i][j].onRelease = function()
{
trace(curLink);
getURL(curLink,"_parent");
}
}
/*
tmc[currentSubmenu].onEnterFrame = function()
{
if(intID == null) easeOut(this);
else easeIn(this);
}
*/
mcmenu[i].onRollOver = function()
{
easeUp(this,true);
}
mcmenu[i].onRollOut = function()
{
easeDown(this,true);
}
mcmenu[i].onRelease = function()
{
getURL(mitems.link,"_parent");
}
currentSubmenu++;
}
}
}
function easeIn(mc:MovieClip):Void
{
new mx.transitions.Tween(mc, "_alpha", mx.transitions.easing.Back.easeOut, mc._alpha, 80, 10);
}
function easeOut(mc:MovieClip):Void
{
new mx.transitions.Tween(mc, "_alpha", mx.transitions.easing.Back.easeOut, mc._alpha, 0, 10);
}
function easeUp(mc:MovieClip,sm:Boolean):Void
{
new mx.transitions.Tween(mc.textfield, "_alpha", mx.transitions.easing.Strong.easeIn, mc.textfield._alpha, 80, 5);
if(!sm)
{
new mx.transitions.Tween(mc.background, "_y", mx.transitions.easing.Back.easeOut, mc.background._y, -10, 10);
new mx.transitions.Tween(mc.background, "_alpha", mx.transitions.easing.Strong.easeIn, mc.background._alpha, 100, 6);
}
else
{
mc.sub._visible = true;
mc.sub._alpha = 100;
//new mx.transitions.Tween(submc, "_alpha", mx.transitions.easing.Back.easeOut, submc._alpha, 100, 10);
//if(intID == null) sleep(2.5);
}
}
function easeDown(mc:MovieClip,sm:Boolean):Void
{
new mx.transitions.Tween(mc.textfield, "_alpha", mx.transitions.easing.Strong.easeIn, mc.textfield._alpha, 100, 5);
if(!sm)
{
new mx.transitions.Tween(mc.background, "_y", mx.transitions.easing.Strong.easeIn, mc.background._y, 0, 10);
new mx.transitions.Tween(mc.background, "_alpha", mx.transitions.easing.Strong.easeIn, mc.background._alpha, startalpha, 10);
}
else
{
//mc.sub._visible = false;
//mc.sub._alpha = 0;
//new mx.transitions.Tween(submc, "_alpha", mx.transitions.easing.Back.easeOut, submc._alpha, 0, 10);
}
}
function sleep(seconds)
{
intID = setInterval(function() { clearInterval(intID);intID=null; },seconds*1000);
}
En dit is het xml bestand:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<navigation>
<menuitem>
<text>Home</text>
<link>index.php</link>
</menuitem>
<menuitem name="Over mij">
<item>
<text>Ik</text>
<link><![CDATA[index.php?pid=1&sid=0]]></link>
</item>
<item>
<text>CV</text>
<link><![CDATA[index.php?pid=1&sid=1]]></link>
</item>
<item>
<text>Foto's</text>
<link><![CDATA[index.php?pid=1&sid=2]]></link>
</item>
</menuitem>
<menuitem name="Werk">
<item>
<text>Portfolio</text>
<link><![CDATA[index.php?pid=0&sid=0]]></link>
</item>
<item>
<text>Experimenten</text>
<link><![CDATA[index.php?pid=0&sid=1]]></link>
</item>
</menuitem>
<menuitem>
<text>Contact</text>
<link><![CDATA[index.php?pid=2]]></link>
</menuitem>
</navigation>
De fla (http://145.89.191.230/~rubendegooijer/header.fla)
De swf (http://145.89.191.230/~rubendegooijer/header.swf)
Ik hoop dat iemand de moeite wil nemen om te kijken wat er mogelijk aan de hand is. Bedankt!!!!!
Groetjes,
Ruben de Gooijer