第四部分
1.AS3的API概览
1.API总览
- 分为三个部分
- Flash Player提供的API(核心)
- Adobe官方产品提供的API
- 第三方提供的API
2.架构
3.第三方类库提供API
- corelib
- com.adobe.crypto:提供常用加密算法
- com.adobe.images:提供将位图转换成JPG,PNG的编码器
- com.adobe.serialization.json:对JSON的支持
- com.adobe.utils:一组实用的数组,字符串,XML,字典等工具类
- Flex Component Kit for Flash CS3
- as3flexunitib
2.事件发送和处理
1.事件处理机制的产生与原理
- DOM3事件处理机制( 数据的提供者只管发出数据对象,只要确保对象是flash.events.Event类或其子类的实例即可。)
- 事件(Event):数据对象(包含:事件类型(Type),事件目标(Target),事件数据(Data))
- 事件发送者(Event dispatcher):数据对象发出者
- 事件侦听者(Event listener):接受事件的对象
- DOM3事件执行流程
- 注册侦听器:发出事件由哪个对象的哪个方法来接受
- 发送事件:发送的事件类型与侦听器注册类型匹配
- 侦听事件
- 移除侦听器
2.事件
1.Event类的属性(只读属性)(type,target,cuttrentTarget,eventPhase,bubbles,cancelable)
- type:存储事件对象的名称,字符串类型
- target:持有引用,指向最初发出事件的哪个对象,Object类型
- cuttrentTarget,eventPhase,bubbles:事件流机制相关属性
- cancelable:事件引起的默认动作是否可以被取消,Boolean类型
2.Event类的构造函数
public function Event(type:String, bubbles:Boolean = false , cancelable:Boolean = false)
* 生成事件对象:
var evt:Event = new Event(Event.COMPLETE);
var evt:Event = new Event(Event.CHANGE,true,false);
3.Event类的方法
- clone():返回当前事件对象的一个拷贝(通常EventDispatcher类自动调用)
- toString():返回对象表示值的字符串形式
- formatToString():重写toString(),返回字符串中加入新的事件实例属性
- isDefaultPrevented()和preventDefault():阻止事件默认行为的发生
- stopImmediatePropagation()和stopPropagation():阻止事件的传播,使侦听器失效。
4.自定义事件类
- 当事件对象中加入格外的属性和方法
- 创建:
- 新建类,证明继承Event类或子类
- 在类中添加静态常量,规范新的事件类会有哪些事件类型
- 重写构造函数,clone()方法,toString()或formatToString()方法
public class OrderEvent extends Event{
public static const ORDER_DISHES:String = ‘点菜’;
private var _dishes:Array; //存储点的菜名
public function OrderEvent(){
super(ORDER_DISHES);//将静态属性ORDER_DISHES作为事件默认类型
}
//OrderEvent 的getter和setter方法:客人点的菜名清单
public function set dishes(dishesAry:Array):void{
_dishes = dishesAry;
}
public function get dishes():Array{
return _dishes ;
}
override public function toString():String{
return formatToString(“...”);
}
override public function clone():Event{
//确保返回当前类的实例
var tmpEvt:OrderEvent = new OrderEvent();
tmpEvt._dishes = _dishes;
return tmpEvt;
}
}
3.侦听器
- 事件侦听器必须为Function类型
- 事件发送者必须是EventDispatcher类或者其子类的实例
事件发送者的实例方法
public function addEventListener(type:String, listener:Function):void
type:事件类型名称
listener:处理事件的侦听器
创建
function listenerName(evt:Event):void{…}
移除侦听器
事件发送者.removeEventListener(事件类型,侦听器);
检测侦听器
1.hasEventListener(type:String):Boolean
2.willTrigger(type:String):Boolean//可以检查显示列表对象事件流所有阶段中的所有父级上的侦听器
事件优先级
public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
第四个参数为事件优先级参数,数字越大,优先级越高
事件弱引用
第5个参数表示:
强引用(默认值):防止侦听器被当作垃圾回收
弱引用:为了防止无意识的对象保留引起的内存泄漏
4.自定义类发送事件的方式
- 继承EventDispatcher类
public class KingdaSampleDispatcher extends EventDispatcher{
public static var ACTION:String = “action”;
public function doSomething():void{
//......代码
//发送事件
dispatcherEvent(new Event(KingdaSampleDispatcher.ACTION));
}
}
- 复合EventDispatcher对象
public class KingdaClass{
private var _dispatcher:EventDispatcher;
public static const ACTION:String = “yeahyeah”;
public function KingdaClass(){
initSender();
}
private function initSender():void{
_dispatcher = new EventDispatcher();
}
//调用专门的方法(method)来返回发送事件的EventDispatcher
public function getSender():EventDispatcher{
return _dispatcher;
}
public function doSomething():void{
trace(“doSomething”);
//发送事件
var evtObj:Event = new Event(KingdaClass.ACTION);
_dispatcher.dispatcherEvent(evtObj);
}
}
- 实现IEventDispatcher接口(实现5个接口)
- addEventListener()
- dispatchEvent()
- hasEventListener()
- removeEventListener()
- willTrigger()
3.AS3网络通信基础
1.流程(过程相互独立)
构建通信请求对象
- 请求对象包含足够的信息
- 请求的URL地址:对应于URLRequest对象的url属性
- 请求的方式:对应与method属性,默认是GET方式
构建URLRequest对象:
var variables:URLVariables = new URLVariables(“name=foo&age=28”)
var request:URLRequest = new URLRequest ();
request.url = “http://www.........”;
request.method = URLRequestMethod.GET;
request.data = variables;
- 提交XML,构建请求对象:
var loginXML:XML =
<login>
<username>......</username>
<password>......</password>
</login>;
var request:URLRequest = new URLRequest ();
request.url = “http://www.........”;
request.contentType = “text/xml”;
request.method = URLRequestMethod.POST;
request.data = loginXML.toXMLString();
2.发出数据请求
var loader:URLLoader = new URLLoader(request);
//或者
var loader:URLLoader = new URLLoader();
loader.load(request);
//有数据返回,就会到URLLoader 对象中的data属性
- URLLoader对象的6中事件,可以监听
- load()调用,发出Event.OPEN事件
- 加载过程中,发出ProgressEvent.PROGRESS事件(下载字节数信息)
- 加载完成,发出Event.COMPLETE
- 加载完成或失败,发出HTTP状态事件HTTPStatusEvent.HTTP_STATUS
- 加载失败,发出IOErrorEvent.IO_ERROR事件
- 发现加载内容不符规则,发出SecurityErrorEvent.SECURITY_ERROR
2.读取数据
- 读取文本格式数据(dataFormat=URLLoaderDataFormat.TEXT)
- 读取值对格式数据(dataFormat=URLLoaderDataFormat.VARIABLES)
- 读取二进制格式数据(Loader对象读取二进制方法loadBytes())
3.navigateToURL()
- 在Flash中打开网站
API格式
public function navigateToURL(request:URLRequest,window:String = null):void
request:包含要跳转的完整
window:显示网站的浏览器窗口或者HTML框架
impot flash.net.*;
var myurl:URLRequest = new URLRequest(“http://www........”);
navigateToURL(myurl,”_blank”)