HändelseobjektFlash 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 EventKlassen Event definierar en antal skrivskyddade egenskaper och konstanter som erbjuder viktig information om ett händelseobjekt. Följande är särskilt viktigt:
Typer av händelseobjektAlla 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 standardbeteendeKoden kan kontrollera om standardbeteendet för ett visst 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 standardbeteendet för en händelse under Metoder för klassen Event. Information om händelseflödeDe å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 bubblesEn 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 eventPhaseDu 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 targetEgenskapen 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 currentTargetEgenskapen 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 EventDet finns tre kategorier med metoder för klassen Event:
Verktygsmetoder i klassen EventDet finns två verktygsmetoder i klassen Event. Med metoden clone() kan du 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ödeDu 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:
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 standardbeteendet för en händelseDe två metoder som finns för att avbryta standardbeteendet är preventDefault() och isDefaultPrevented(). Anropa metoden preventDefault() om du vill avbryta det standardbeteende 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 underklasserFö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. |
![]() |