Einer der Vorteile von Actionscript 3 ist das flexibel einsetzbare Eventsystem. Jedoch benutzt man selten die Funktionen des Event-Objektes! So lassen sich mehrere EventListener mit einer einzigen Funktion verarbeiten. Ausgangspunkt meines Beitrages ist eine kleine Homepage mit 3 Buttons und den Seiten: News, „Über mich“ und Impressum.
Viele Designer und Programmierer lesen in Tutorials und Howto’s, wie man EventListener auf einem Objekt anwendet. Im Normalfall sieht das für den News-Button dann so aus:
// News_btn ist der Name der Instanz
News_btn.addEventListener(MouseEvent.CLICK, clickNews);
function clickNews(e:MouseEvent):void
{
// hier passiert etwas
}
Verwendet man nun mehrere Buttons wird der Code unübersichtlich und schwer wartbar.
// News_btn, About_btn, Impressum_btn ist der Name einer Instanz eines Buttons
News_btn.addEventListener(MouseEvent.CLICK, clickNews);
About_btn.addEventListener(MouseEvent.CLICK, clickAbout);
Impressum_btn.addEventListener(MouseEvent.CLICK, clickImpressum);
function clickNews(e:MouseEvent):void
{
// hier passiert etwas
}
function clickAbout(e:MouseEvent):void
{
// hier passiert etwas
}
function clickImpressum(e:MouseEvent):void
{
// hier passiert etwas
}
Man benutzt einfach nur eine Funktion für alle EventListener von Buttons:
// Eventlistener hinzufuegen
// News_btn, About_btn, Impressum_btn ist der Name einer Instanz eines Buttons
News_btn.addEventListener(MouseEvent.CLICK, click);
About_btn.addEventListener(MouseEvent.CLICK, click);
Impressum_btn.addEventListener(MouseEvent.CLICK, click);
// Die Funktion um das Clickevent zuverarbeiten
function click(e:MouseEvent):void
{
// alte Seite ausblenden
hiding();
// hier gibt es verschiedene Varianten, ich stelle 3 vor
// Variante 1 - nach dem Name der Instanz filtern
switch(e.currentTarget.name)
{
case "News_btn":
News_Page.alpha = 1.0;
break;
case "About_btn":
About_Page.alpha = 1.0;
break;
case "Impressum_btn":
Impressum_Page.alpha = 1.0;
break;
}
// Variante 2 - nach dem Typ der Instanz filtern
switch(e.currentTarget)
{
case News_btn:
News_Page.alpha = 1.0;
break;
case About_btn:
About_Page.alpha = 1.0;
break;
case Impressum_btn:
Impressum_Page.alpha = 1.0;
break;
}
// Variante 3 - nach dem Text im Button filtern
var btn:Button = e.currentTarget as Button;
switch(btn.Output_txt.text)
{
case "News":
News_Page.alpha = 1.0;
break;
case "Über mich":
About_Page.alpha = 1.0;
break;
case "Impressum":
Impressum_Page.alpha = 1.0;
break;
}
}
Anhand des Event-Objetes kann ich den entsprechenden Button identifizieren und darauf reagieren. So genügt eine einfache Funktion mit einer Switch-Case Anweisung, um die geforderte Funktionalität abzubilden.
[download id=“3″ format=“2″]
Kommentar verfassen