Olay nesneleri

Flash Player 9 ve üstü, Adobe AIR 1.0 ve üstü

Olay nesneleri, yeni olay işleme sisteminde iki ana amaca hizmet eder. Birincisi, olay nesneleri bir özellik kümesindeki belirli özellikler hakkındaki bilgileri saklayarak gerçek olayları temsil eder. İkincisi, olay nesneleri, olay nesnelerini işlemenize izin veren ve olay işleme sisteminin davranışını etkileyen bir özellik kümesi içerir.

Bu özellik ve yöntemlere erişilmesini kolaylaştırmak için, Flash Player API'si, tüm olay nesneleri için temel sınıf görevi gören bir Event sınıfını tanımlar. Event sınıfı, tüm olay nesneleri için ortak olan ana bir özellik ve yöntem kümesi tanımlar.

Bu bölüm Event sınıfı özelliklerinin ele alınmasıyla başlar, Event sınıfı yöntemlerinin açıklamasıyla devam eder ve neden Event sınıfının alt sınıflarının var olduğuna dair bir açıklamayla sona erer.

Event sınıfının özelliklerini anlama

Event sınıfı, bir olay nesnesi hakkında önemli bilgiler sağlayan birçok salt okunur özellik ve sabitleri tanımlar. Özellikle şunlar çok önemlidir:

  • Olay nesnesi türleri, sabitler tarafından temsil edilir ve Event.type özelliğinde saklanır.

  • Bir olayın varsayılan davranışının önlenip önlenemeyeceği, bir Boolean değeriyle temsil edilir ve Event.cancelable özelliğinde saklanır.

  • Olay akışı bilgileri, kalan özelliklerde bulunur.

Olay nesnesi türleri

Her olay nesnesinin ilişkilendirilmiş bir olay türü vardır. Olay türleri dize değerleri olarak Event.type özelliğinde saklanır. Bir olay nesnesinin türünü bilmekte yarar vardır, böylece kodunuz farklı türlerdeki nesneleri ayırt edebilir. Örneğin, aşağıdaki kod, clickHandler() dinleyici işlevinin, myDisplayObject öğesine iletilen herhangi bir fare tıklatma olay nesnelerini yanıtlaması gerektiğini belirtir:

myDisplayObject.addEventListener(MouseEvent.CLICK, clickHandler);

Event sınıfı ile yirmi olay türü ilişkilendirilmiş olup bunlar Event sınıfı sabitleri tarafından temsil edilir ve bazıları aşağıdaki Event sınıfı tanımının alıntısında gösterilmektedir:

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

Bu sabitler, belirli olay türlerini ifade etmenin kolay bir yolunu sağlar. Temsil ettikleri dizeleri kullanmak yerine bu sabitleri kullanmanız gerekir. Kodunuzda bir sabit adını yanlış yazarsanız, derleyici yanlışı yakalar ancak bunun yerine dizeleri kullanırsanız, derleme zamanında yazım hatası bildirilmeyebilir ve bu da hata ayıklaması yapılması zor olan beklenmeyen bir davranışa yol açabilir. Örneğin, bir olay dinleyicisi eklerken şu kodu kullanın:

myDisplayObject.addEventListener(MouseEvent.CLICK, clickHandler);

bunun yerine:

myDisplayObject.addEventListener("click", clickHandler);

Varsayılan davranış bilgileri

Kodunuz belirli bir olay nesnesi için varsayılan davranışın engellenip engellenemeyeceğini cancelable özelliğine erişerek kontrol edebilir. cancelable özelliği, varsayılan bir davranışın önlenip önlenemeyeceğini belirten bir Boolean değerini içerir. preventDefault() yöntemini kullanarak az sayıda olayla ilişkilendirilmiş varsayılan bir davranışı engelleyebilir veya iptal edebilirsiniz. Daha fazla bilgi için Event sınıfının yöntemlerini anlama altındaki Varsayılan olay davranışını iptal etme konusuna bakın.

Olay akışı bilgileri

Kalan Event sınıfı özellikleri, aşağıdaki listede açıklandığı gibi, olay nesnesi ve olay nesnesinin olay akışıyla ilişkisi hakkında önemli bilgiler içerir:

  • bubbles özelliği, olay nesnesinin katıldığı olay akışının bölümleri hakkında bilgiler içerir.

  • eventPhase özelliği, olay akışındaki geçerli aşamayı belirtir.

  • target özelliği, olay hedefine bir başvuruyu saklar.

  • currentTarget özelliği, geçerli olarak olay nesnesini işleyen görüntüleme listesi nesnesine bir başvuruyu saklar.

bubbles özelliği

Bir olayın olay nesnesi, olay akışının köpürme aşamasına katılıyorsa, başka bir deyişle, olay nesnesi, Sahne Alanı'na ulaşıncaya kadar üst öğeleri üzerinden hedef düğümden geri iletiliyorsa, o olayın köpürdüğü söylenebilir. Event.bubbles özelliği, olay nesnesinin köpürme aşamasına katılıp katılmadığını belirten bir Boolean değerini saklar. Köpüren tüm olaylar ayrıca yakalama ve hedef aşamalarına da katıldığından, köpüren tüm olaylar, olay akışı aşamalarının üçüne de katılır. Değer true olursa, olay nesnesi üç aşamanın tamamına katılır. Değer false olursa, olay nesnesi köpürme aşamasına katılmaz.

eventPhase özelliği

eventPhase özelliğini inceleyerek herhangi bir olay nesnesinin olay aşamasını belirleyebilirsiniz. eventPhase özelliği, olay akışının üç aşamasından birini temsil eden işaretsiz bir tam sayı değeri içerir. Flash Player API'si, aşağıdaki kod alıntısında gösterildiği gibi, üç işaretsiz tam sayı değerine karşılık gelen üç sabiti içeren ayrı bir EventPhase sınıfını tanımlar:

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

Bu sabitler, eventPhase özelliğinin üç geçerli değerine karşılık gelir. Kodunuzu daha okunaklı hale getirmek için bu sabitleri kullanabilirsiniz. Örneğin, yalnızca olay hedefi, hedef sahne alanı üzerinde olduğunda myFunc() adında bir işlevin çağrılmasını sağlamak istiyorsanız, bu koşulu test etmek için şu kodu kullanabilirsiniz:

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

target özelliği

target özelliği, olayın hedefi olan nesneye bir başvuru içerir. Bazı durumlarda bu olabildiğince nettir, örneğin, mikrofon etkin hale geldiğinde, olay nesnesinin hedefi Microphone nesnesidir. Ancak hedef, görüntüleme listesindeyse, görüntüleme listesi hiyerarşisinin dikkate alınması gerekir. Örneğin, kullanıcı, örtüşen görüntüleme listesi nesneleri içeren bir noktaya fare tıklatması girerse, Flash Player ve AIR uygulaması, olay hedefi olarak her zaman Sahne Alanı'nın en uzağında bulunan nesneyi seçer.

Karmaşık SWF dosyaları için, özellikle de içindeki düğmelerin rutin olarak daha küçük alt nesnelerle süslendiği SWF dosyaları için, target özelliği genellikle düğme yerine düğmenin alt nesnesini işaret ettiği için, bu özellik sık kullanılmaz. Bu durumlarda en yaygın uygulama, düğmeye olay dinleyicileri eklenmesi ve target özelliği düğmenin alt öğesini işaret edebilirken currentTarget özelliği düğmeyi işaret ettiğinden bu ikinci özelliğin kullanılmasıdır.

currentTarget özelliği

currentTarget özelliği, geçerli olarak olay nesnesini işleyen nesneye bir başvuruyu saklar. İncelediğiniz olay nesnesini geçerli olarak hangi düğümün işlediğinin bilinmesi garip görünse de, o olay nesnesinin olay akışında herhangi bir görüntüleme nesnesine dinleyici işlevi ekleyebileceğinizi ve dinleyici işlevinin herhangi bir konuma yerleştirilebileceğini unutmayın. Üstelik aynı dinleyici işlevi farklı görüntüleme nesnelerine eklenebilir. Projenin boyutu ve karmaşıklık düzeyi arttıkça, currentTarget özelliği çok daha fazla kullanışlı hale gelir.

Event sınıfının yöntemlerini anlama

Event sınıfı yöntemleri üç kategoriye ayrılır:

  • Bir olay nesnesinin kopyalarını oluşturabilen veya olay nesnesini dizeye dönüştürebilen yardımcı program yöntemleri

  • Olay akışından olay nesnelerini kaldıran olay akışı yöntemleri

  • Varsayılan davranışı engelleyen veya engellenip engellenmediğini kontrol eden varsayılan davranış yöntemleri

Event sınıfı yardımcı program yöntemleri

Event sınıfında iki yardımcı program yöntemi vardır. clone() yöntemi bir olay nesnesinin kopyalarını oluşturmanızı sağlar. toString() yöntemi, bir olay nesnesinin değerleriyle beraber özelliklerinin dize olarak temsilini oluşturmanızı sağlar. Bu yöntemlerin ikisi de olay modeli sistemi tarafından dahili olarak kullanılır ancak genel kullanım için geliştiricilere sunulmuştur.

Event sınıfının alt sınıflarını oluşturan ileri düzey geliştiriciler için, olay alt sınıfının düzgün çalışmasını sağlamak için her iki yardımcı program yönteminin sürümlerini geçersiz kılmanız ve uygulamanız gerekir.

Olay akışını durdurma

Bir olay nesnesinin olay akışında yoluna devam etmesini önlemek için Event.stopPropagation() yöntemini veya Event.stopImmediatePropagation() yöntemini çağırabilirsiniz. Neredeyse aynı olan ve yalnızca geçerli düğümün diğer olay dinleyicilerinin çalıştırılmasına izin verilip verilmediğine göre değişiklik gösteren iki yöntem vardır:

  • Event.stopPropagation() yöntemi, olay nesnesinin sonraki düğüme hareket etmesini önler ancak yalnızca geçerli düğümdeki diğer olay dinleyicilerinin çalıştırılmasına izin verildikten sonra bunu yapar.

  • Event.stopImmediatePropagation() yöntemi de, olay nesnesinin sonraki düğüme hareket etmesini önler ancak geçerli düğümdeki diğer olay dinleyicilerinin çalıştırılmasına izin vermez.

Bu yöntemlerden herhangi birinin çağrılması, bir olayla ilişkilendirilmiş varsayılan davranışın gerçekleşip gerçekleşmemesi üzerinde herhangi bir etki yaratmaz. Varsayılan davranışı önlemek için Event sınıfının varsayılan davranış yöntemlerini kullanın.

Varsayılan olay davranışını iptal etme

Varsayılan davranışı iptal etmeyle ilgili iki yöntem, preventDefault() ve isDefaultPrevented() yöntemleridir. Bir olayla ilişkilendirilen varsayılan davranışı iptal etmek için preventDefault() yöntemini çağırın. Bir olay nesnesinde preventDefault() öğesinin önceden çağrılmış olup olmadığını kontrol etmek için, isDefaultPrevented() yöntemini çağırın, bu yöntem önceden çağrılmışsa true değeri, aksi takdirde false değeri döndürülür.

Yalnızca olayın varsayılan davranışı iptal edilebiliyorsa preventDefault() yöntemi çalışır. Bu olay türünün API belgelerine başvurarak veya olay nesnesinin cancelable özelliğini incelemek için ActionScript'i kullanarak bu şekilde olup olmadığını kontrol edebilirsiniz.

Varsayılan davranışın iptali, olay akışında olay nesnesinin ilerleyişi üzerinde bir etkiye sahip değildir. Bir olay nesnesini olay akışından kaldırmak için, Event sınıfının olay akışı yöntemlerini kullanın.

Event sınıfının alt sınıfları

Birçok olay için, Event sınıfında tanımlanan ortak özellik kümesi yeterlidir. Ancak diğer olaylar, Event sınıfında kullanılabilir özellikler tarafından yakalanamayan benzersiz özelliklere sahiptir. Bu olaylar için, ActionScript 3.0, Event sınıfının birçok alt sınıfını tanımlar.

Her alt sınıf, ilgili olay kategorisi için benzersiz olan ek özellikler ve olay türleri sağlar. Örneğin, fare girdisiyle ilgili olaylar, Event sınıfında tanımlı özellikler tarafından yakalanamayan birçok benzersiz özelliğe sahiptir. MouseEvent sınıfı, fare olayının konumu ve fare olayı sırasında belirli tuşlara basılmış olup olmadığı gibi bilgileri içeren on özellik ekleyerek Event sınıfını genişletir.

Event alt sınıfı ayrıca alt sınıfla ilişkilendirilmiş olay türlerini temsil eden sabitleri de içerir. Örneğin, MouseEvent sınıfı click , doubleClick , mouseDown ve mouseUp olay türleri de dahil olmak üzere birçok fare olayı türü için sabitleri tanımlar.

Olay nesneleri altındaki Event sınıfı yardımcı program yöntemleri bölümünde açıklandığı gibi, Event alt sınıfı oluştururken, alt sınıfa özgü işlevsellik sağlamak için clone() ve toString() yöntemlerini geçersiz kılmanız gerekir.