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