Ereignisobjekte

Flash Player 9 und höher, Adobe AIR 1.0 und höher

Ereignisobjekte dienen im neuen Ereignisverarbeitungssystem zwei Hauptzwecken. Erstens stellen Ereignisobjekte tatsächliche Ereignisse dar, indem Informationen zu bestimmten Ereignissen in einem Eigenschaftensatz gespeichert werden. Zweitens enthalten Ereignisobjekte einen Satz von Methoden, mit denen Sie Ereignisobjekte bearbeiten und das Verhalten des Ereignis verarbeitenden Systems beeinflussen können.

Um den Zugriff auf diese Eigenschaften und Methoden zu erleichtern, ist in der Flash Player-API eine Event-Klasse definiert, die als Basisklasse für alle Ereignisobjekte dient. Die Event-Klasse definiert einen grundlegenden Satz von Eigenschaft und Methoden, die alle Ereignisobjekte gemeinsam haben.

In diesem Abschnitt werden zunächst die Eigenschaften der Event-Klasse behandelt und dann die entsprechenden Methoden beschrieben. Schließlich wird erklärt, warum es Unterklassen der Event-Klasse gibt.

Eigenschaften der Event-Klasse

Die Event-Klasse definiert eine Reihe schreibgeschützter Eigenschaften und Konstanten, die wichtige Informationen zu einem Ereignisobjekt enthalten. Besonders wichtig sind dabei folgende Eigenschaften:

  • Der Typ von Ereignisobjekten wird durch Konstanten festgelegt und in der Event.type -Eigenschaft gespeichert.

  • Ob das Standardverhalten eines Ereignisses unterdrückt werden kann, wird durch einen booleschen Wert angegeben und in der Eigenschaft Event.cancelable gespeichert.

  • Die übrigen Eigenschaften enthalten Informationen zum Ereignisablauf.

Ereignisobjekttypen

Jedem Ereignisobjekt ist ein Ereignistyp zugewiesen. Ereignistypen sind in der Event.type -Eigenschaft als Stringwerte gespeichert. Es ist hilfreich, den Typ eines Ereignisobjekts zu kennen, damit Ihr Code Objekte verschiedener Typen voneinander unterscheiden kann. Mit dem folgenden Code wird beispielsweise festgelegt, dass die Listener-Funktion clickHandler() auf alle Mausklick-Ereignisobjekte reagieren soll, die an myDisplayObject übergeben werden:

myDisplayObject.addEventListener(MouseEvent.CLICK, clickHandler);

Der Event-Klasse selbst sind etwa zwei Dutzend Ereignistypen zugeordnet. Diese werden durch Konstanten der Event-Klasse angegeben. Einige davon finden Sie im nachstehenden Auszug aus der Definition der Event-Klasse:

package flash.events 
{ 
    public class Event 
    { 
        // class constants 
        public static const ACTIVATE:String = "activate"; 
        public static const ADDED:String= "added"; 
        // remaining constants omitted for brevity 
    } 
}

Diese Konstanten stellen eine einfache Möglichkeit dar, sich auf bestimmte Ereignistypen zu beziehen. Verwenden Sie diese Konstanten anstelle der Strings, denen sie entsprechen. Schreibfehler in einem Konstantennamen im Programmcode werden vom Compiler gemeldet. Wenn Sie jedoch Strings verwenden, werden Rechtschreibfehler beim Kompilieren u. U. nicht erkannt und können zu unerwartetem Verhalten führen. Die Fehlersuche ist möglicherweise schwierig. Verwenden Sie beispielsweise beim Hinzufügen eines Ereignis-Listeners besser:

myDisplayObject.addEventListener(MouseEvent.CLICK, clickHandler);

anstelle von:

myDisplayObject.addEventListener("click", clickHandler);

Informationen zum Standardverhalten

Ihr Code kann überprüfen, ob das Standardverhalten für ein bestimmtes Ereignisobjekt verhindert werden kann, indem er auf die cancelable -Eigenschaft zugreift. Die cancelable -Eigenschaft enthält einen booleschen Wert, der angibt, ob das Standardverhalten unterdrückt werden kann oder nicht. Bei einigen Ereignissen können Sie das Standardverhalten mit der preventDefault() -Methode verhindern, oder „abbrechen“. Weitere Informationen finden Sie unter „Unterdrücken des Standardverhaltens für Ereignisse“ unter Methoden der Event-Klasse .

Informationen zum Ereignisablauf

Die übrigen Eigenschaften der Event-Klasse enthalten wichtige Informationen zu einem Ereignisobjekt und der entsprechenden Einordnung im Ereignisablauf. Diese sind in der folgenden Liste beschrieben:

  • Die bubbles -Eigenschaft enthält Informationen über die Bereiche des Ereignisablaufs, die das Ereignisobjekt durchläuft.

  • Die eventPhase -Eigenschaft gibt die aktuelle Phase im Ereignisablauf an.

  • Die target -Eigenschaft speichert einen Verweis auf das Ereignisziel.

  • Die currentTarget -Eigenschaft speichert einen Verweis auf das Objekt in der Anzeigeliste, mit dem das Ereignisobjekt derzeit verarbeitet wird.

bubbles-Eigenschaft

Es wird von der Aufstiegsphase eines Ereignisses gesprochen, wenn das entsprechende Ereignisobjekt die Aufstiegsphase des Ereignisablaufs durchläuft. Dies bedeutet, dass das Ereignisobjekt vom Zielknoten über die Vorgängerobjekte zurückgegeben wird, bis es die Bühne erreicht. Die Event.bubbles -Eigenschaft speichert einen booleschen Wert, der angibt, ob das Ereignis die Aufstiegsphase durchläuft. Da alle die Aufstiegsphase durchlaufenden Ereignisse auch die Empfangsphase und die Zielphase durchlaufen, durchläuft jedes entsprechende Ereignis alle drei Phasen des Ereignisablaufs. Beim Wert true durchläuft das Ereignisobjekt alle drei Phasen. Wenn der Wert false ist, durchläuft das Objekt die Aufstiegsphase nicht.

eventPhase-Eigenschaft

Sie können die Ereignisphase für jedes Ereignisobjekt ermitteln, indem Sie die entsprechende eventPhase -Eigenschaft auslesen. Die eventPhase -Eigenschaft enthält einen vorzeichenlosen Ganzzahlwert, mit dem eine der drei Phasen des Ereignisablaufs angegeben wird. In der Flash Player-API ist eine eigene EventPhase-Klasse mit drei Konstanten für diese drei vorzeichenlosen Ganzzahlwerte definiert, wie im folgenden Codeauszug dargestellt:

package flash.events 
{ 
    public final class EventPhase 
    { 
        public static const CAPTURING_PHASE:uint = 1; 
        public static const AT_TARGET:uint = 2; 
        public static const BUBBLING_PHASE:uint= 3; 
    } 
}

Diese Konstanten entsprechen den drei möglichen Werten für die eventPhase -Eigenschaft. Sie können diese Konstanten einsetzen, damit der Programmcode besser lesbar wird. Wenn Sie beispielsweise sicherstellen möchten, dass eine Funktion mit dem Namen myFunc() nur aufgerufen wird, wenn sich das Ereignisziel in der Zielphase befindet, können Sie diese Bedingung mit dem folgenden Programmcode testen:

if (event.eventPhase == EventPhase.AT_TARGET) 
{ 
    myFunc(); 
}

target-Eigenschaft

Die target -Eigenschaft enthält einen Verweis auf das Zielobjekt des entsprechenden Ereignisses. In einigen Fällen handelt es sich um eine direkte Zuordnung, z. B. wenn ein Mikrofon aktiviert wird und das Ziel des Ereignisobjekts das Microphone-Objekt ist. Wenn das Ziel Bestandteil der Anzeigeliste ist, muss jedoch auch die Anzeigelistenhierarchie berücksichtigt werden. Wenn ein Benutzer beispielsweise einen Mausklick an einem Punkt eingibt, an dem sich Anzeigelistenobjekte überlappen, wird in Flash Player und AIR immer das Objekt als Ereignisziel ausgewählt, das am weitesten von der Bühne entfernt ist.

Bei komplexen SWF-Dateien – besonders solchen, bei denen Schaltflächen üblicherweise mit kleineren untergeordneten Objekten versehen sind – wird die target -Eigenschaft häufig nicht verwendet, da sie in der Regel nicht auf die Schaltfläche, sondern auf ein untergeordnetes Objekt verweist. In diesen Fällen ist es üblich, den Ereignis-Listener der Schaltfläche hinzuzufügen und die currentTarget -Eigenschaft zu verwenden, da diese auf die Schaltfläche verweist, während die target -Eigenschaft auch auf ein untergeordnetes Objekt der Schaltfläche verweisen kann.

currentTarget-Eigenschaft

Die currentTarget -Eigenschaft enthält einen Verweis auf das Objekt, mit dem das Ereignisobjekt derzeit verarbeitet wird. Es mag seltsam erscheinen, nicht zu wissen, in welchem Knoten das überprüfte Ereignisobjekt derzeit verarbeitet wird. Beachten Sie jedoch, dass Sie jedem Anzeigeobjekt im Ereignisablauf des Ereignisobjekts eine Listener-Funktion hinzufügen können und dass diese an beliebiger Stelle platziert werden kann. Darüber hinaus kann dieselbe Listener-Funktion unterschiedlichen Anzeigeobjekten hinzugefügt werden. Wenn Projekte an Umfang und Komplexität zunehmen, erhöht sich auch zunehmend der Nutzen der currentTarget -Eigenschaft.

Methoden der Event-Klasse

Es gibt drei Kategorien von Event-Klassenmethoden:

  • Dienstprogrammmethoden, die Kopien eines Ereignisobjekts erstellen oder es in einen String konvertieren

  • Ereignisablaufmethoden, mit denen Sie Ereignisobjekte aus dem Ereignisablauf entfernen können

  • Standardverhaltenmethoden, die das Standardverhalten überprüfen oder feststellen, ob es verhindert wurde

Dienstprogrammmethoden der Event-Klasse

Es liegen zwei Dienstprogrammmethoden für die Event-Klasse vor. Die clone() -Methode ermöglicht Ihnen, Kopien eines Ereignisobjekts zu erstellen. Die toString() -Methode ermöglicht Ihnen, eine Stringdarstellung der Eigenschaften eines Ereignisobjekts zusammen mit deren Werten zu generieren. Beide Methoden werden intern im Ereignismodell verwendet, stehen jedoch auch zur allgemeinen Verwendung für Entwickler bereit.

Erfahrene Entwickler, die Unterklassen der Event-Klasse erstellen möchten, müssen diese beiden Methoden überschreiben und eigene Versionen implementieren, damit die neue Event-Unterklasse ordnungsgemäß verwendet werden kann.

Anhalten des Ereignisablaufs

Sie können entweder die Event.stopPropagation() -Methode oder die Event.stopImmediatePropagation() -Methode aufrufen, um die weitere Verarbeitung eines Ereignisobjekts im Ereignisablauf zu unterbinden. Beide Methoden sind fast identisch. Sie unterscheiden sich lediglich darin, ob die Abarbeitung der anderen Ereignis-Listener des aktuellen Knotens zulässig ist oder nicht:

  • Die Event.stopPropagation() -Methode verhindert, dass das Ereignisobjekt an den nächsten Knoten übergeben wird, jedoch erst, nachdem alle anderen Ereignis-Listener des aktuellen Knotens verarbeitet wurden.

  • Die Event.stopImmediatePropagation() -Methode verhindert, dass das Ereignisobjekt an den nächsten Knoten übergeben wird. Alle anderen Ereignis-Listener des aktuellen Knotens werden nicht mehr verarbeitet.

Keine der beiden Methoden hat Auswirkungen auf das einem Ereignis zugeordnete Standardverhalten. Verwenden Sie zum Unterdrücken des Standardverhaltens die Standardverhaltenmethoden der Event-Klasse.

Abbrechen des Standardverhaltens von Ereignissen

Die beiden Methoden, die mit dem Abbrechen von Standardverhalten zu tun haben, sind die preventDefault() -Methode und die isDefaultPrevented() -Methode. Rufen Sie die preventDefault() -Methode auf, um das Standardverhalten abzubrechen, das einem Ereignis zugeordnet ist. Wenn Sie überprüfen möchten, ob preventDefault() für ein Ereignisobjekt bereits aufgerufen wurde, verwenden Sie die isDefaultPrevented() -Methode. Diese gibt den Wert true zurück, wenn die Methode bereits aufgerufen wurde, oder andernfalls den Wert false .

Die preventDefault() -Methode wird nur ausgeführt, wenn das Standardverhalten eines Ereignisses auch wirklich unterdrückt werden kann. Ob dies der Fall ist, können Sie in der API-Dokumentation zu diesem Ereignistyp nachlesen oder in ActionScript durch Überprüfen der cancelable -Eigenschaft des Ereignisobjekts ermitteln.

Das Abbrechen des Standardverhaltens hat keine Auswirkungen auf den Fortgang eines Ereignisobjekts im Ereignisablauf. Verwenden Sie die Ereignisablaufmethoden der Event-Klasse, um ein Ereignisobjekt aus dem Ereignisablauf zu entfernen.

Unterklassen der Event-Klasse

Für viele Ereignisse ist der allgemeine Satz der Eigenschaften, die in der Event-Klasse definiert sind, ausreichend. Andere Ereignisse weisen jedoch einzigartige Merkmale auf, die mit den in der Event-Klasse verfügbaren Eigenschaften nicht erfasst werden können. Für solche Ereignisse definiert ActionScript 3.0 mehrere Unterklassen der Event-Klasse.

Jede Unterklasse fügt zusätzliche Eigenschaften und Ereignistypen hinzu, die für diese Ereigniskategorie spezifisch sind. Beispielsweise weisen Ereignisse für Mauseingaben einige einzigartige Merkmale auf, die mit den in der Event-Klasse verfügbaren Eigenschaften nicht erfasst werden können. Die MouseEvent-Klasse erweitert die Event-Klasse durch Hinzufügen von zehn Eigenschaften für Informationen wie die Position des Mausereignisses und ob während des Mausereignisses bestimmte Tasten gedrückt wurden.

Unterklassen der Event-Klasse enthalten zudem Konstanten für die einer Unterklasse zugeordneten Ereignistypen. In der MouseEvent-Klasse sind beispielsweise Konstanten für verschiedene Mausereignistypen definiert, einschließlich der Ereignistypen click , doubleClick , mouseDown und mouseUp .

Wie im Abschnitt zu Dienstprogrammmethoden der Event-Klasse unter Ereignisobjekte beschrieben, müssen Sie beim Erstellen einer Event-Unterklasse die Methoden clone() und toString() außer Kraft setzen, um die für eine Unterklasse erforderliche Funktionalität bereitzustellen.