Volledige versie bekijken : urls aan buttons linken
Woehoe23
%Europe/Berlin %982 %2008, 23:34
Een nieuweling hier :D
Ik heb een menuutje gemaakt. Maar ik wil uiteraard dat de buttons ergens naartoe linken.
var menu_items:Array = new Array();
menu_items.push("Home");
menu_items.push("Projecten");
menu_items.push("Contact");
for (var index:Number = 0; index < menu_items.length; index++)
{
// movieclip uit library ophalen
var clip:MovieClip = new buttonMc();
// tekstveld met variabele inhoud neerzetten
clip.titel_veld.text = menu_items[index];
//zet de positie
clip.y = index*clip.height;
// toevoegen aan display
addChild(clip);
}
Ik laat dus elke keer buttonMc verschijnen, met een variabele tekst, die uit de Array menu_items wordt gehaald. Maar nu wil ik dus dat aan deze drie buttons ook een URL wordt gelinkt mbv een MouseEvent.CLICK. Dat je dus naar bijvoorbeeld home.html, projecten.html en contact.html gaat als je op deze buttons klikt. Heb al enorm veel lopen ***ten met navigateToURL, maar kwam er echt niet uit. Het probleem is vooral dat ik de buttons laat opkomen dmv een for loop. Vandaar mijn vraag.
Ik zat zelf te denken aan een nieuwe Array met url's erin, die ik vervolgens in dezelfde for loop aan de buttons wilde linken. Dus de eerste button moet gelinkt worden aan de eerste URL uit de nieuwe Array, en de tweede aan de tweede, enzovoort. Maar hoe dit precies moest wist ik ook niet. Al kan het ook zijn dat ik helemaal verkeerd zit te denken, hehe.
Alvast bedankt mensen!
PsK
%Europe/Berlin %390 %2008, 09:22
hey Woehoe,
je kunt het inderdaad oplossen met een extra array te maken met allemaal links erin. Of je kunt een multidimensional array maken.
De link kan je toevoegen aan je knop in je loop door een extra property aan de knop mee te geven(in dit geval heb ik link gebruikt).
Daarna registreer je een listener op de knop en laat je hem doorlinken naar de website bij een CLICK event.
Voorbeeld
//multidimensional array
menu_items = [["Home", "http://test.nl"], ["Projecten", "http://projecten.nl"], ["Contact", "http://contact.nl"]];
//In de loop voeg je een listener toe aan elke knop en de url om door te linken
or (var index:Number = 0; index < menu_items.length; index++)
{
// movieclip uit library ophalen
//Classes beginnen altijd met een hoofdletter!!
var clip:MovieClip = new ButtonMc();
// tekstveld met variabele inhoud neerzetten
//tekst uit de array halen
clip.titel_veld.text = menu_items[index][0];
//link toevoegen aan de knop
clip.link = menu_items[index][1];
//MouseListener toevoegen aan de knop
clip.addEventListener(MouseEvent.CLICK, clickHandler);
//zet de positie
clip.y = index*clip.height;
// toevoegen aan display
addChild(clip);
}
//functie voor afhandelen van event
function clickHandler( e:MouseEvent ) : void
{
navigateToURL( new URLRequest( e.currentTarget.link ) );
}
succes :)
Woehoe23
%Europe/Berlin %593 %2008, 14:15
Bedankt PsK! Het werkt perfect!
En dan nog een vraagje om erop verder te borduren. Nu kan ik dus naar verschillende website linken dus die multidimensionale array. Is het ook mogelijk om daar ipv die websites bepaalde acties in te zetten? Dat bijvoorbeeld MainMc verdwijnt als ik op Home klik en HomeMc verschijnt.
var menu_items:Array = new Array();
menu_items = [["Home", ??], ["Projecten", ??], ["Contact", ??]];
Dan krijgen we de for loop, waarna de click event weer afgehandeld wordt. Alleen nu niet met een navigateToURL, maar met een actie die de huidige movieclip "verwijdert" en de nieuwe (die dus gekoppeld wordt aan de button) laat zien.
Woehoe23
%Europe/Berlin %822 %2008, 19:44
Ik word helemaal gek, haha. Ben al de hele dag bezig met dat hele kleine dingetje! Ik heb nu dit:
//multidimensional array
var menu_items:Array = new Array();
menu_items = [["Home", "clipcontent"], ["Projecten", "zoef"], ["Contact", "bla"]];
//In de loop voeg je een listener toe aan elke knop en de url om door te linken
for (var index:Number = 0; index < menu_items.length; index++)
{
// movieclip uit library ophalen
//Classes beginnen altijd met een hoofdletter!!
var clip:MovieClip = new ButtonMc();
// tekstveld met variabele inhoud neerzetten
//tekst uit de array halen
clip.titel_veld.text = menu_items[index][0];
//link toevoegen aan de knop
clip.link = menu_items[index][1];
//MouseListener toevoegen aan de knop
clip.addEventListener(MouseEvent.CLICK, clickHandler);
//zet de positie
clip.y = index*clip.height;
clip.x = -150;
// toevoegen aan display
addChild(clip);
}
// alvast even de movieclip ContentMc eruit halen
var clipcontent:MovieClip = new ContentMc();
//functie voor afhandelen van event
function clickHandler( e:MouseEvent ) : void
{
addChild(e.currentTarget.link);
}
Als ik vervolgens op de bovenste knop druk ("Home") dan krijg:
TypeError: Error #1034: Type Coercion failed: cannot convert "contentclip" to flash.display.DisplayObject.
at lala_fla::MainTimeline/clickHandler()
Woehoe23
%Europe/Berlin %919 %2008, 22:03
Jaaa, ik blijf replyen op me eigen topic, maar ik ben weer een stapje verder als het goed is. Ik moest simpelweg de "" verwijderen rondom de tweede waarde, omdat hij ze anders als string interpreteert.
Maar nu krijg ik elke keer de foutmelding
TypeError: Error #2007: Parameter child must be non-null.
at flash.display::DisplayObjectContainer/addChild()
at lala_fla::MainTimeline/clickHandler()
BernardV
%Europe/Berlin %921 %2008, 22:07
addChild is om iets toe te voegen aan de stage!
Als je wilt dat je item naar een link gaat gebruik je bijvoorbeeld navigateToUrl.
Nu voeg je een "string" toe aan je stage, wat natuurlijk niet kan.
Woehoe23
%Europe/Berlin %941 %2008, 22:35
Maar ik wil niet dat dat 'ie naar een link gaat ;) - Ik wil dat er een (andere) movieclip wordt toegevoegd aan m'n stage dmv het klikken op een van de buttons :)
PsK
%Europe/Berlin %967 %2008, 23:12
Zet in je clickhandler een switch case die kijkt naar de naam van het geklikte knopje.
En voor elke case voeg je een andere movieclip toe aan de stage.
Je array hoeft dan niet meer multidimensional te zijn want elk knopje heeft een unique naam. ( moet je nog wel even toevoegen clip.name = menu_item[index]; )
Woehoe23
%Europe/Berlin %028 %2008, 00:40
Nogmaals bedankt PsK! Ik ben verder alleen niet bekend met de zogenaamde switch case. Met wat google-en, kom ik op de volgende constructie, maar verder kom ik niet.
switch(??)
{
case *hier unieke naam*:
addChild(NaamMovieClip);
break;
}
Alvast bedankt mannen. Ik leer in twee dagen meer dan in vier weken :)
PsK
%Europe/Berlin %620 %2008, 14:53
Vergeet de F1 in flash niet;)
//in de switch zeg je welke var er gecheckt moet worden
switch(e.currentTarget.name)
{
//in de case zet je de verschillende mogelijkheden
case "Home":
addChild(NaamMovieClip);
break;
case "Projecten":
addChild(naammovieclip);
break;
//en je kan nog een default meegeven zou ik in dit geval niet doen
//maar mocht je het ooit nodig hebben.
default:
addChild(defaultmovieclip);
break;
}
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.