许多 ActionScript 类都具有称为事件的功能。当某个事件发生时,对象会引发一个事件。例如,当有人将鼠标悬停在 SWF 中的按钮符号上时,会针对该特定 Button 实例引发 Button.onRollOver 事件。当鼠标移动到别处时,会为同一个实例引发 Button.onRollOut 事件。无论是否有人注意到,这些事件都会发生。如果您想实际做某事以响应事件,则必须使用事件处理程序或事件侦听器对其进行管理。这两者之间的选择是由对象决定的——一些对象需要处理程序,一些侦听器——所以如果有疑问,请点击 ol' ActionScript Language Reference。处理程序相对容易,但出于某种原因,听众一开始似乎会让人感到困惑。
事件处理程序
最流行的事件可能属于 Button 和 MovieClip 类,它们恰好共享许多相同的内容(影片剪辑可以是一个按钮,但反过来不行)。要处理 Button.onRelease 事件,您所要做的就是将一个按钮元件拖到舞台上,并通过属性检查器给它一个实例名称。在框架脚本中使用此名称为事件分配函数。
myButton.onRelease = function() {
// do something
}
其他 Button 事件的工作方式相同,MovieClip 事件和所有需要事件处理程序的事件也是如此。
可以处理任意数量的事件。只需根据需要为每个事件分配一个功能。例如,响应翻转、释放和推出的按钮可能如下所示……
myButton.onRollOver = function() {
// do something
}
myButton.onRelease = function() {
// do something
}
myButton.onRollOut = function() {
// do something
}
事件监听器
管理事件侦听器需要更多步骤。一个监听器是用一个通用的 Object 实例来完成的。该对象充当至少两个其他对象之间的联络人:引发事件的对象和侦听事件的任何对象。让我们看一个 MovieClipLoader 示例。
var mcl:MovieClipLoader = new MovieClipLoader();
此时,我们已经声明了一个变量 mcl,它指向 MovieClipLoader 的一个实例。现在我们将声明另一个变量 mclListener,它指向 Object 的一个实例。 (听起来很有趣,我知道,但我们正在创建一个 Object 对象。)
var mclListener:Object = new Object();
这个通用对象现在将成为我们的联络人。此时,代码看起来与事件处理程序的方法非常相似。
mclListener.onLoadInit = function() {
// do something
}
我可以从 MovieClipLoader 类中选择任何事件,这真的没关系。这里要注意的是,一个通用对象代表操作类实例处理事件。使用事件处理程序,操作类实例处理自己的事件。
现在我们有了监听器,并且一个函数已经代表我们的 MovieClipLoader 实例分配给它的一个事件,我们只需要将监听器订阅到 mcl。
mcl.addListener(mclListener);
完成。让我们一起来看看:
var mcl:MovieClipLoader = new MovieClipLoader();
var mclListener:Object = new Object();
mclListener.onLoadInit = function() {
// do something
}
mcl.addListener(mclListener);
要监听多个事件,只需使用事件处理程序方法即可。
var mcl:MovieClipLoader = new MovieClipLoader();
var mclListener:Object = new Object();
mclListener.onLoadStart = function() {
// do something
}
mclListener.onLoadProgress = function() {
// do something
}
mclListener.onLoadInit = function() {
// do something
}
mcl.addListener(mclListener);
参考:http://www.quip.net/blog/2006/flash/event-handlers-listeners
您也可以查看yahoo answer