使用事件处理函数方法

事件处理函数方法是一种类方法,它在事件在该类的实例上发生时调用。例如,Button 类定义 onPress 事件处理函数,只要按下鼠标就对 Button 对象调用该处理函数。但是,与一个类的其它方法不同,您没有直接调用事件处理函数;Flash Player 在相应事件发生时自动调用事件处理函数。

默认情况下,事件处理函数方法是未定义的:在发生特定事件时,将调用其相应的事件处理函数,但应用程序不会进一步响应该事件。要让应用程序响应该事件,需要使用 function 语句定义一个函数,然后将该函数分配给相应的事件处理函数。然后,只要发生该事件,就自动调用分配给该事件处理函数的函数。

事件处理函数由以下三部分组成:事件所应用的对象、对象的事件处理函数方法的名称和分配给事件处理函数的函数。下例显示事件处理函数的基本结构。

object.eventMethod = function () {
  // 您的代码,对事件作出反应
}

例如,假定您在舞台上具有名为 next_btn 的按钮。以下代码将一个函数分配给按钮的 onPress 事件处理函数;该函数将播放头向前移动到时间轴上的下一帧。

next_btn.onPress = function () 
  nextFrame();
}

在以上代码中,nextFrame() 函数被直接分配给 onPress。您也可以将一个函数引用(名称)分配给某一事件处理函数方法,然后在以后定义该函数。

// 将一个函数引用分配给按钮的 onPress 事件处理函数方法
next_btn.onPress = goNextFrame;

// 定义 doSubmit() 函数
function goNextFrame() {
  nextFrame();
}

请注意,您将函数引用(而不是函数的返回值)分配给 onPress 事件处理函数。

// 错误!
next_btn.onPress = goNextFrame();
// 正确。
next_btn.onPress = goNextFrame;

某些事件处理函数接收提供与发生的事件有关的信息的传递参数。例如,在文本字段实例获取键盘焦点时调用 TextField.onSetFocus 事件处理函数。此事件处理函数接收对以前具有键盘焦点的文本字段对象的引用。

例如,以下代码将某些文本插入刚失去键盘焦点的文本字段。

userName_txt.onSetFocus = function(oldFocus_txt) {
  oldFocus_txt.text = "I just lost keyboard focus";
}  

以下动作脚本类定义事件处理函数:Button、ContextMenu、ContextMenuItem、Key、
LoadVars、LocalConnection、Mouse、MovieClip、MovieClipLoader、Selection、SharedObject、Sound、Stage、TextField、XML 和 XMLSocket。有关它们提供的事件处理函数的更多信息,请参见动作脚本字典概述中这些类的相应条目。

还可以将函数分配给在运行时创建的对象的事件处理函数。例如,以下代码创建一个新的影片剪辑实例 (newclip_mc),然后将一个函数分配给该剪辑的 onPress 事件处理函数。

_root.attachMovie("symbolID", "newclip_mc", 10);
newclip_mc.onPress = function () {
  trace("You pressed me");
}

有关更多信息,请参见在运行时创建影片剪辑