De klasse Event definieert een aantal alleen-lezen-eigenschappen en constanten die belangrijke informatie over een gebeurtenisobject bevatten. Hiervan zijn met name de volgende belangrijk:
-
Gebeurtenisobjecttypen worden als constanten voorgesteld en in de eigenschap
Event.type
opgeslagen.
-
Een Booleaanse waarde geeft aan of u het standaardgedrag van een gebeurtenis kunt voorkomen. Deze waarde wordt opgeslagen in de eigenschap
Event.cancelable
.
-
In de resterende eigenschappen wordt informatie over de gebeurtenisstroom opgeslagen.
Gebeurtenisobjecttypen
Aan elk gebeurtenisobject is een gebeurtenistype gekoppeld. Gebeurtenistypen worden als tekenreekswaarden opgeslagen in de eigenschap
Event.type
. Het is handig om het type van een gebeurtenisobject te weten, zodat de code onderscheid kan maken tussen objecten van verschillende typen. De volgende code geeft bijvoorbeeld aan dat de listenerfunctie
clickHandler()
moet reageren op elk muisklikgebeurtenisobject dat aan
myDisplayObject
wordt doorgegeven:
myDisplayObject.addEventListener(MouseEvent.CLICK, clickHandler);
Er zijn meer dan twintig gebeurtenistypen gekoppeld aan de klasse Event zelf en deze worden vertegenwoordigd door constanten van de klasse Event. Enkele hiervan worden getoond in het volgende fragment van de definitie van de klasse Event:
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
}
}
Met deze constanten kunt u op eenvoudige wijze verwijzen naar specifieke gebeurtenistypen. U moet deze constanten gebruiken in plaats van de tekenreeksen die deze vertegenwoordigen. Als de naam van een constante onjuist wordt gespeld in de code, wordt de fout door de compiler afgevangen. Als u echter tekenreeksen gebruikt, wordt een typefout mogelijk niet herkend bij compilatie, wat kan leiden tot onverwacht gedrag en fouten die moeilijk kunnen worden opgespoord. Bij het toevoegen van een gebeurtenislistener gebruikt u bijvoorbeeld de volgende code:
myDisplayObject.addEventListener(MouseEvent.CLICK, clickHandler);
en niet:
myDisplayObject.addEventListener("click", clickHandler);
Informatie over standaardgedrag
Door in de code de waarde van de eigenschap
cancelable
op te vragen, kunt u nagaan of standaardgedrag voor een bepaald gebeurtenisobject kan worden voorkomen. De eigenschap
cancelable
heeft een Booleaanse waarde die aangeeft of standaardgedrag kan worden voorkomen. Met de methode
preventDefault()
kunt u standaardgedrag dat aan een klein aantal gebeurtenissen is gekoppeld, voorkomen of annuleren. Zie Het standaardgedrag van gebeurtenissen annuleren onder
Methoden van de klasse Event
voor meer informatie.
Informatie over de gebeurtenisstroom
De resterende eigenschappen van de klasse Event bevatten belangrijke informatie over een gebeurtenisobject en de relatie hiervan tot de gebeurtenisstroom, zoals in de volgende lijst wordt beschreven:
-
De eigenschap
bubbles
bevat informatie over de fasen van de gebeurtenisstroom waaraan het gebeurtenisobject deelneemt.
-
De eigenschap
eventPhase
geeft aan wat de huidige fase in de gebeurtenisstroom is.
-
De eigenschap
target
bevat een verwijzing naar het gebeurtenisdoel.
-
De eigenschap
currentTarget
bevat een verwijzing naar het weergaveoverzichtobject dat momenteel het gebeurtenisobject verwerkt.
De eigenschap bubbles
Een gebeurtenis loopt omhoog (bubble in het Engels) als het gebeurtenisobject aan de terugkoppelfase van de gebeurtenisstroom deelneemt. Dit houdt in dat het gebeurtenisobject vanuit de doelnode en via de voorouders naar het werkgebied terugkeert. De eigenschap
Event.bubbles
bevat een Booleaanse waarde die aangeeft of het gebeurtenisobject aan de terugkoppelfase deelneemt. Aangezien alle gebeurtenissen in de terugkoppelfase ook aan de vastleg- en doelfase deelnemen, nemen deze gebeurtenissen aan alle drie fasen van de gebeurtenisstroom deel. Als de waarde
true
is, neemt het gebeurtenisobject aan alle drie de fasen deel. Als de waarde
false
is, neemt het gebeurtenisobject niet deel aan de terugkoppelfase.
De eigenschap eventPhase
U kunt de gebeurtenisfase van elk gebeurtenisobject bepalen aan de hand van de waarde van de eigenschap
eventPhase
. De eigenschap
eventPhase
bevat een geheel-getalwaarde zonder teken die een van de drie fasen van de gebeurtenisstroom voorstelt. De Flash Player-API definieert een aparte klasse EventPhase die drie constanten bevat die overeenkomen met de drie geheel-getalwaarden zonder teken, zoals in het volgende codefragment wordt getoond:
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;
}
}
Deze constanten komen overeen met de drie geldige waarden van de eigenschap
eventPhase
. U kunt deze constanten gebruiken om de code beter leesbaar te maken. Als u er bijvoorbeeld voor wilt zorgen dat een functie met de naam
myFunc()
alleen wordt aangeroepen als het gebeurtenisdoel zich in de doelfase bevindt, kunt u de volgende code gebruiken om op deze voorwaarde te testen:
if (event.eventPhase == EventPhase.AT_TARGET)
{
myFunc();
}
De eigenschap target
De eigenschap
target
bevat een verwijzing naar het object dat het doel van de gebeurtenis is. In sommige gevallen is dit vrij duidelijk. Als een microfoon actief wordt, is het doel van het gebeurtenisobject bijvoorbeeld het microfoonobject. Als het doel zich echter in het weergaveoverzicht bevindt, moet u rekening houden met de hiërarchie van het weergaveoverzicht. Als een gebruiker bijvoorbeeld een muisklik uitvoert op een punt met overlappende weergaveoverzichtobjecten, kiezen Flash Player en AIR altijd het object dat het verst verwijderd is van het werkgebied als gebeurtenisdoel.
Voor veel complexe SWF-bestanden, vooral die waarbij zich veel kleinere onderliggende objecten op knoppen bevinden, kunt u de eigenschap
target
niet gebruiken, omdat deze naar een onderliggend object van een knop verwijst in plaats van naar de knop zelf. In die gevallen is het gebruikelijk om gebeurtenislisteners toe te voegen aan de knop en de eigenschap
currentTarget
te gebruiken, omdat deze wel naar de knop verwijst, terwijl de eigenschap
target
naar een onderliggend object van de knop kan verwijzen.
De eigenschap currentTarget
De eigenschap
currentTarget
bevat een verwijzing naar het object dat momenteel het gebeurtenisobject verwerkt. Hoewel het vreemd kan lijken om niet te weten welke node momenteel het door u bestudeerde gebeurtenisobject verwerkt, moet u niet vergeten dat u een listenerfunctie kunt toevoegen aan elk weergaveobject in de gebeurtenisstroom van dat gebeurtenisobject en dat de listenerfunctie op elke locatie kan worden geplaatst. Verder kan een bepaalde listenerfunctie aan verschillende weergaveobjecten worden toegevoegd. Hoe groter en complexer een project is, des te nuttiger de eigenschap
currentTarget
is.