[1.事件處理機(jī)制]
AS2 的事件處理機(jī)制并不完美.形態(tài)多樣.不易于管理.在這里可以解決此問(wèn)題的一半.本文會(huì)先了解和使用 AS2 中基本的事件處理機(jī)制.然后建立強(qiáng)大的事件處理機(jī)制.來(lái)方便管理自己的程序.下面講解.
形態(tài)多樣的事件處理機(jī)制(后面會(huì)詳細(xì)的講解): 1.回調(diào)函數(shù).(如 onLoad, onHTTPStatus 等) 2.使用 addListener 方法. (如 onLoadStart, onLoadInit 等) 3.使用 addEventListener 方法. (如 click, change 等)
它們的作用域和形態(tài)(代碼): 作用域是指標(biāo)識(shí)符(如常量、數(shù)據(jù)類型、變量或例程)在程序內(nèi)可被引用的范圍. 1.this 指向觸發(fā)此事件的對(duì)象
object.onLoad = function() { trace(this); //輸出: object } 2.this 指向偵聽(tīng)器對(duì)象
var listenerObject:Object = {}; listenerObject.onLoadStart = function() { trace(this); //輸出: listenerObject } broadcasterObject.addListener(listenerObject); 3.使用偵聽(tīng)器對(duì)象:this 指向偵聽(tīng)器對(duì)象
var listenerObject:Object = {}; listenerObject.click = function(evt:Object) { trace(this); //輸出: listenerObject } broadcasterObject.addEventListener("click", listenerObject); 使用函數(shù):this 指向觸發(fā)此事件的對(duì)象
function clickHandler(evt:Object):Void { trace(this); //輸出: broadcasterObject } broadcasterObject.addEventListener("click", clickHandler);
有時(shí)我們需要更改它們的作用域怎么辦? 想要改變它們的作用域,需使用 Delegate 類的 create 方法. 此類的全路徑: mx.utils.Delegate; 用法: Delegate.create(要運(yùn)行函數(shù)的范圍, 函數(shù)); 例: 1.this 指向 _level0
import mx.utile.Delegate; object.onLoad = Delegate.create(this, _onLoad); function _onLoad():Void { trace(this); //輸出: _level0 } 2.this 指向 _level0
import mx.utile.Delegate; var listenerObject:Object = {}; listenerObject.onLoadStart = Delegate.create(this, loadStart); function loadStart():Void { trace(this); //輸出: _level0 } broadcasterObject.addListener(listenerObject); 3. 使用偵聽(tīng)器對(duì)象:this 指向 _level0
import mx.utile.Delegate; var listenerObject:Object = {}; listenerObject.click = Delegate.create(this, clickHandler); function clickHandler(evt:Object) { trace(this); //輸出: _level0 } broadcasterObject.addEventListener("click", listenerObject); 使用函數(shù):this 指向 _level0
function clickHandler(evt:Object):Void { trace(this); //輸出: _level0 } broadcasterObject.addEventListener("click", Delegate.create(this, clickHandler)); 事件對(duì)象: 它包含兩個(gè)基本屬性: type:String 事件名. target:Object 事件源.此屬性可以不指定,默認(rèn)為事件源(調(diào)用dispatchEvent方法的對(duì)象). 此對(duì)象傳遞給 EventDispatcher 類的 dispatchEvent 方法并作為參數(shù)傳遞到偵聽(tīng)器. 例:
//發(fā)送事件. dispatchEvent({type:"click", target:this}); //事件處理函數(shù). function clickHandler(evt:Object):Void { trace([evt.type, evt.target]); } //添加事件偵聽(tīng)器. addEventListener("click", clickHandler);
下一節(jié)講:[2.創(chuàng)建類庫(kù)]
經(jīng)典論壇討論: http://bbs.blueidea.com/thread-2768209-1-1.html
出處:藍(lán)色理想
責(zé)任編輯:藍(lán)色月光
上一頁(yè) [AS2]事件處理機(jī)制 -- 目錄 下一頁(yè) [AS2]事件處理機(jī)制 -- 創(chuàng)建類庫(kù)
◎進(jìn)入論壇Flash專欄版塊參加討論
|