Händelseobjekt

Flash Player 9 och senare, Adobe AIR 1.0 och senare

Händelseobjekt har två huvuduppgifter i det nya händelsehanteringssystemet. För det första representerar händelseobjekt faktiska händelser genom att lagra information om specifika händelser i en uppsättning egenskaper. För det andra innehåller händelseobjekt en uppsättning metoder som gör att du kan hantera händelseobjekt och påverka hur händelsehanteringssystemet fungerar.

För att underlätta tillgången till dessa egenskaper och metoder innehåller Flash Player-gränssnittet en klass, Event, som fungerar som basklass för alla händelseobjekt. Klassen Event definierar en grundläggande uppsättning egenskaper och metoder, som är gemensamma för alla händelseobjekt.

Det här avsnittet inleds med information om egenskaperna hos klassen Event, fortsätter med en beskrivning av klassens metoder och slutar med en förklaring av varför klassen finns.

Egenskaper för klassen Event

Klassen Event definierar en antal skrivskyddade egenskaper och konstanter som erbjuder viktig information om ett händelseobjekt. Följande är särskilt viktigt:

  • Händelseobjekttyper representeras av konstanter och lagras i egenskapen Event.type .

  • Huruvida en händelses standardbeteende kan förhindras representeras av ett booleskt värde och lagras i egenskapen Event.cancelable .

  • Händelseflödesinformation lagras i de övriga egenskaperna.

Typer av händelseobjekt

Alla händelseobjekt har en tillhörande händelsetyp. Händelsetyper lagras i egenskapen Event.type som strängvärden. Den är användbar för att ta reda på ett händelseobjekts typ så att din kod kan särskilja objekt av olika typer. Följande kod anger till exempel att avlyssnarfunktionen clickHandler() bör svara på händelseobjekt av typen musklickning som skickas till myDisplayObject :

myDisplayObject.addEventListener(MouseEvent.CLICK, clickHandler);

Ett par dussin händelsetyper är kopplade till själva klassen Event och representeras av konstanter för klassen. Några av de konstanterna visas i följande utdrag från definitionen av klassen 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 
    } 
}

Dessa konstanter underlättar när du vill referera till specifika händelsetyper. Du bör använda dessa konstanter i stället för strängarna som de representerar. Om du stavar ett konstantnamn fel i din kod kommer kompilatorn att fånga felet. Om du däremot använder strängar kan skrivfel inte framkomma vid kompileringen och kan därför leda till fel som kan vara svåra att hitta. Använd till exempel följande kod när du lägger till en händelseavlyssnare:

myDisplayObject.addEventListener(MouseEvent.CLICK, clickHandler);

i stället för:

myDisplayObject.addEventListener("click", clickHandler);

Information om standardbeteende

Koden kan kontrollera om standardbeteendet för ett givet händelseobjekt kan förhindras genom att använda egenskapen cancelable . Egenskapen cancelable innehåller ett booleskt värde som anger om ett standardbeteende kan förhindras eller inte. Du kan förhindra eller avbryta standardbeteendet som är kopplat till ett litet antal händelser genom att använda metoden preventDefault() . Mer information finns i Avbryta standardbeteende för händelse under Metoder för klassen Event .

Information om händelseflöde

De återstående egenskaperna för klassen Event innehåller viktig information om ett händelseobjekt och dess relation till händelseflödet enligt beskrivningen i följande lista:

  • Egenskapen bubbles innehåller information om de delar av händelseflödet som händelseobjektet deltar i.

  • Egenskapen eventPhase indikerar aktuell fas i händelseflödet.

  • Egenskapen target lagrar en referens till händelsemålet.

  • Egenskapen currentTarget lagrar en referens till visningslisteobjektet som för närvarande bearbetar händelseobjektet.

Egenskapen bubbles

En händelse sägs bubbla om dess händelseobjekt deltar i bubblingsfasen i händelseflödet, vilket innebär att händelseobjektet överförs från målnoden tillbaka genom dess indirekta överordnade tills det når scenen. Egenskapen Event.bubbles lagrar ett booleskt värde som indikerar om händelseobjektet deltar i bubblingsfasen. Eftersom alla händelser som bubblar även deltar i hämtnings- och målfaserna, deltar alla händelser som bubblar i alla tre av händelseflödets faser. Om värdet är true deltar händelseobjektet i alla tre faser. Om värdet är false deltar händelseobjektet inte i bubblingsfasen.

Egenskapen eventPhase

Du kan bestämma händelsefasen för ett händelseobjekt genom att undersöka dess eventPhase -egenskap. Egenskapen eventPhase innehåller ett heltalsvärde utan tecken som representerar en av de tre faserna i händelseflödet. Flash Player API innehåller en separat EventPhase-klass med tre konstanter som motsvarar de tre heltalsvärdena utan tecken som i följande kodutdrag:

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; 
    } 
}

Dessa konstanter motsvarar de tre giltiga värdena för egenskapen eventPhase . Du kan använda dessa konstanter för att göra din kod enklare att läsa. Om du till exempel vill se till att en funktion med namnet myFunc() bara anropas om händelsemålet är i målfasen, kan du använda följande kod för att testa detta:

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

Egenskapen target

Egenskapen target innehåller en referens till objektet som är målet för händelsen. I vissa fall är detta relativt okomplicerat, såsom när en mikrofon blir aktiv då Microphone-objektet blir målet för händelseobjektet. Om målet däremot finns i visningslistan måste visningslistans hierarki tas med i beräkningen. Om en användare till exempel klickar med musen på en punkt som inkluderar överlappande visningslisteobjekt, väljer Flash Player och AIR alltid objektet som är längst bort från scenen som händelsemål.

För invecklade SWF-filer, särskilt sådana i vilka knappar vanligtvis förses med mindre underordnade objekt, används egenskapen target normalt inte så mycket eftersom den ofta kommer att peka på en knapps underordnade objekt i stället för på knappen. I så fall är det brukligt att lägga till händelseavlyssnare till knappen och att sedan använda egenskapen currentTarget eftersom den pekar på knappen. Egenskapen target kan däremot peka på ett av knappens underordnade objekt.

Egenskapen currentTarget

Egenskapen currentTarget innehåller en referens till det objekt som för närvarande bearbetar händelseobjektet. Även om det kan förefalla märkligt att inte känna till vilken nod som för närvarande bearbetar händelseobjektet som du undersöker, bör du komma ihåg att du kan lägga en avlyssnarfunktion till valfritt visningsobjekt i det händelseobjektets händelseflöde, och att avlyssnarfunktionen kan placeras på valfri plats. Det går dessutom att lägga till samma avlyssnarfunktion till olika visningsobjekt. Allteftersom projektet blir större och mer invecklat, blir egenskapen currentTarget mer och mer användbar.

Metoder för klassen Event

Det finns tre kategorier med metoder för klassen Event:

  • Verktygsmetoder, som kan skapa kopior av ett händelseobjekt eller konvertera det till en sträng

  • Händelseflödesmetoder, som tar bort händelseobjekt från händelseflödet

  • Standardbeteendemetoder, som förhindrar standardbeteende eller kontrollerar om beteendet har förhindrats

Verktygsmetoder i klassen Event

Det finns två verktygsmetoder i klassen Event. Metoden clone() gör att du kan skapa kopior av ett händelseobjekt. Med metoden toString() kan du generera en strängrepresentation av ett händelseobjekts egenskaper tillsammans med deras värden. Båda dessa metoder används internt av händelsemodellsystemet, men är tillgängliga för programmerare att använda.

För erfarna programmerare som skapar underklasser till klassen Event måste du åsidosätta och implementera versioner av båda verktygsmetoderna för att händelseunderklassen ska fungera.

Stoppa ett händelseflöde

Du kan anropa antingen metoden Event.stopPropagation() eller metoden Event.stopImmediatePropagation() om du vill förhindra att ett händelseobjekt fortsätter genom händelseflödet. De båda metoderna är nästan identiska och skiljer sig bara åt när det gäller huruvida den aktuella nodens övriga händelseavlyssnare får köras:

  • Metoden Event.stopPropagation() förhindrar att händelseobjektet fortsätter till nästa nod, men bara efter att eventuella övriga händelseavlyssnare i aktuell nod tillåts köras.

  • Metoden Event.stopImmediatePropagation() förhindrar också att händelseobjektet fortsätter till nästa nod, men tillåter inte att några andra händelseavlyssnare i aktuell nod körs.

Anropande av någon av dessa metoder påverkar inte om standardbeteendet som är kopplat till en händelse utförs. Använd standardbeteendemetoderna i klassen Event för att förhindra standardbeteende.

Avbryta standardbeteende för händelse

De två metoder som finns för att avbryta standardbeteendet är preventDefault() och isDefaultPrevented() . Anropa metoden preventDefault() om du vill avbryta standardbeteendet som är kopplat till en händelse. Om du vill kontrollera om preventDefault() redan har anropats för ett händelseobjekt, anropar du metoden isDefaultPrevented() . Värdet true returneras om metoden redan har anropats. Annars returneras värdet false .

Metoden preventDefault() fungerar bara om händelsens standardbeteende går att avbryta. Du kan kontrollera om så är fallet genom att läsa i API-dokumentationen för den händelsetypen, eller genom att använda ActionScript för att undersöka cancelable -egenskapen för händelseobjektet.

Om du avbryter standardbeteendet har detta ingen effekt på händelseobjektets förlopp genom händelseflödet. Använd händelseflödesmetoden för klassen Event om du vill ta bort ett händelseobjekt från händelseflödet.

Klassen Events underklasser

För många händelser är den vanliga uppsättningen med egenskaper som är definierade i klassen Event fullt tillräcklig. Andra händelser kan dock ha unika särdrag som inte täcks av de egenskaper som är tillgängliga i klassen Event. För dessa händelser definierar ActionScript 3.0 flera underklasser till klassen Event.

Varje underklass har ytterligare egenskaper och händelsetyper, som är unika för den kategorin av händelser. Händelser som rör musklickning har till exempel flera unika särdrag som inte täcks av egenskaperna som är definierade i klassen Event. Klassen MouseEvent utökar klassen Event genom att lägga till tio egenskaper. Dessa innehåller information om till exempel platsen för mushändelsen och om huruvida särskilda tangenttryckningar gjordes under mushändelsen.

En Event-underklass innehåller även konstanter som representerar händelsetyperna som är kopplade till underklassen. Klassen MouseEvent definierar till exempel konstanter för flera mushändelsetyper, inklusive händelsetyperna click , doubleClick , mouseDown och mouseUp .

Enligt beskrivningen i avsnittet Verktygsmetoder i klassen Event under Händelseobjekt måste du, när du skapar en Event-underklass, åsidosätta metoderna clone() och toString() för att erbjuda funktionalitet som är specifik för underklassen.