Flex事件原理剖析

2021-08-25 09:24:51 字數 1713 閱讀 7142

1.事件流

「事件流」說明事件物件如何在顯示列表中穿行。顯示列表以一種可以描述為樹的層次

結構形式進行組織。位於顯示列表層次結構頂部的是舞台,它是一種特殊的顯示物件容器,

用作顯示列表的根。舞台由 flash.display.stage 類表示,且只能通過顯示物件訪問。每個顯示物件都有乙個名為 stage 的屬性,該屬性表示應用程式的舞台。

從概念上來說,事件流分為三部分。第一部分稱為捕獲階段,該階段包括從舞台到目標

節點的父節點範圍內的所有節點。第二部分稱為目標階段,該階段僅包括目標節點。第三部

分稱為冒泡階段。冒泡階段包括從目標節點的父節點返回到舞台的行程中遇到的節點。

2.事件流資訊

其餘 event 類屬性包含有關事件物件及其與事件流的關係的重要資訊,如以下列表所述:

bubbles 屬性包含有關事件流中事件物件參與的部分的資訊。

eventphase 屬性指示事件流中的當前階段。

target 屬性儲存對事件目標的引用。

currenttarget 屬性儲存對當前正在處理事件物件的顯示列表物件的引用。

3.停止事件流

可以呼叫 event.stoppropogation() 方法或 event.stopimmediatepropogation() 方法來阻

止在事件流中繼續執行事件物件。這兩種方法幾乎相同,只有在是否允許執行當前節點的其

它事件偵聽器方面不同:

event.stoppropogation() 方法可阻止事件物件移動到下乙個節點,但只有在允許執行當前節點上的任何其它事件偵聽器之後才起作用。

event.stopimmediatepropogation() 方法也阻止事件物件移動到下乙個節點,但不允許執行當前節點上的任何其它事件偵聽器。

呼叫其中任何乙個方法對是否發生與事件關聯的預設行為沒有影響。使用 event 類的預設

行為方法可以阻止預設行為。

4.取消預設事件行為

與取消預設行為有關的兩個方法是 preventdefault() 方法和 isdefaultprevented() 方法。呼叫 preventdefault() 方法可取消與事件關聯的預設行為。要檢視是否已針對事件物件呼叫了 preventdefault(),請呼叫 isdefaultprevented() 方法,如果已經呼叫,該方法將返回值 true,否則返回值 false。

僅當可以取消事件的預設行為時,preventdefault() 方法才起作用。可通過檢查事件物件的cancelable 屬性來確定是否屬於這種情況。取消預設行為對事件物件通過事件流的進度沒有影響。使用 event 類的事件流方法可以從事件流中刪除事件物件。

5.排程事件

高階程式設計師可以使用 dispatchevent() 方法將自定義事件物件排程到事件流。該方法唯

一接受的引數是對事件物件的引用,此事件物件必須是 event 類的例項或子類。排程後,

事件物件的 target 屬性將設定為對其呼叫了 dispatchevent() 的物件。

6.檢查現有的事件偵聽器

ieventdispatcher 介面的最後兩個方法提供有關是否存在事件偵聽器的有用資訊。如果

在特定顯示列表物件上發現特定事件型別的事件偵聽器, haseventlistener() 方法將返回true。如果發現特定顯示列表物件的偵聽器,willtrigger() 方法也會返回 true。但 willtrigger()不但檢查該顯示物件上的偵聽器,還會檢查該顯示列表物件在事件流所有階段中的所有父級上的偵聽器。

Flex事件分發

本文和大家重點討論一下flex事件分發的概念,在分發事件時,將會分發乙個事件物件出去。不管是那個事件類,都是繼承自flash.events.event物件的,他包含一些比較重要的屬性,type和bubbles。flex事件分發 最終繼承自eventdispatcher的物件都會含有dispatche...

FLEX事件註冊

import mx.controls.alert import flash.events.mouseevent button 事件註冊 bt1.addeventlistener mouseevent.click,onc bt1.addeventlistener mouseevent.mouse mo...

Flex事件機制

事件流按執行流程分為3步 1 捕獲階段 捕獲事件 capturing,從根節點開始順序而下,檢測每個節點是否註冊了 同時,flex 將事件物件的currenttarget 值改為當前正在檢測的物件。如果註冊了 則呼叫監聽函式。2 目標階段 檢測目標的 targeting 觸發在目標物件本身註冊的監聽...