setInterval 函数

setInterval(functionReference:Function, interval:Number, [param1:Object, param2, ..., paramN]) : Number
setInterval(objectReference:Object, methodName:String, interval:Number, [param1:Object, param2, ..., paramN]) : Number

在播放 SWF 文件时,每隔一定时间就调用函数或对象的方法。您可以在一段时间内使用 setInterval() 重复执行任何函数。

在使用 setInterval() 时注意下列提示:

下文将详细讨论这些提示。

"确定被调用的函数的范围。"若要确定被调用函数的范围,请将可在其中执行 setInterval() 方法的对象(对象范围)作为第一个参数传递,将要执行的方法名称作为第二个参数传递(如第二个签名中所示)。这可以确保所需的方法从传入的对象引用的范围内执行。以这种方式执行方法时,它可以使用 this 关键字引用对象上的成员变量。

"确定设置了间隔标识符的范围。"若要确定设置了间隔标识符 (intervalId) 的范围,您可以将它分配给您传递给 setInterval() 的对象范围上的一个成员变量。 这样,被调用的函数就可以在 this.intervalId 找到间隔标识符。

"清除以前设置的间隔。"若要在开始设置新的间隔之前清除以前设置的间隔,通常应先调用 clearInterval()然后 调用 setInterval()。这可以确保您不会覆盖或以其它方式破坏 intervalId 变量,该变量是对当前运行的间隔的唯一引用。要在调用 setInterval() 之前调用 clearInterval(),启动脚本和被执行的脚本都必须能够访问 intervalId,如示例中所示。

注意:当想要脚本停止循环时,请始终确保调用 clearInterval()

可用性:ActionScript 1.0、Flash Player 6

参数

functionReference:Function ― 对要被调用的函数的引用。

interval:Number ― 对传入的 functionReferencemethodName 函数的调用所间隔的时间(以毫秒为单位)。

如果 interval 小于 SWF 文件的帧频(例如,每秒 10 帧 [fps] 相当于 100 毫秒的间隔),则尽可能按照接近 interval 的时间间隔值调用间隔函数。在间隔期间执行大量耗费内存的长脚本将导致延迟。如果被调用的函数启动对可视元素的更改,您应使用 updateAfterEvent() 函数来确保屏幕刷新率足够高。如果 interval 大于 SWF 文件的帧频,则间隔函数仅在 interval 已到期并且 播放头已进入下一帧时才被调用;这就尽可能减轻了每次刷新屏幕时所产生的影响。

param:Object [可选] ― 向发送给 functionReferencemethodName 的函数传递的参数。应该用逗号隔开多个参数:param1 , param2 , ..., paramN

objectReference:Object ― 一个对象,它包含由 methodName 指定的方法。

methodName:String ― 一个方法,它存在于由 objectReference 指定的对象的范围中。

返回

Number ― 一个整数,它标识间隔(间隔 ID),您可以将其传递给 clearInterval() 以取消间隔。

示例

示例 1:以下示例以 20 毫秒的间隔跟踪一条消息,最多跟踪达 10 次,然后清除该间隔。对象范围 this 作为第一个参数传入,方法名称 executeCallback 作为第二个参数传入。这可以确保 executeCallback() 是从调用的脚本的同一范围内执行的。


var intervalId:Number;
var count:Number = 0;
var maxCount:Number = 10;
var duration:Number = 20;

function executeCallback():Void {
 trace("executeCallback intervalId: " + intervalId + " count: " + count);
 if(count >= maxCount) {
 clearInterval(intervalId);
 } 
 count++;
}

intervalId = setInterval(this, "executeCallback", duration);

示例 2:下面的示例与第一个示例类似,只是它先调用 clearInterval(),然后才调用 setInterval()。这有助于防止不需要的循环,并且在清除任何特定间隔之前可以多次执行启动脚本的基于事件的系统中尤其重要。


var intervalId:Number;
var count:Number = 0;
var maxCount:Number = 10;
var duration:Number = 20;

function executeCallback():Void {
 trace("executeCallback intervalId: " + intervalId + " count: " + count);
 if(count >= maxCount) {
 clearInterval(intervalId);
 }
 count++;
}

function beginInterval():Void {
 if(intervalId != null) {
 trace("clearInterval");
 clearInterval(intervalId);
 }
 intervalId = setInterval(this, "executeCallback", duration);
}

beginInterval();
beginInterval();
beginInterval();

示例 3:下面的示例说明如何将自定义参数传递给被调用的函数。


var intervalId:Number;
var count:Number = 0;
var maxCount:Number = 10;
var duration:Number = 20;
var colors:Array = new Array("red", 
 "blue", 
 "yellow", 
 "purple", 
 "green", 
 "orange", 
 "salmon", 
 "pink", 
 "lilac", 
 "powder blue", 
 "mint");

function executeCallback(param:String) {
 trace("executeCallback intervalId: " + intervalId + " count: " + count + " param: " + param);
 clearInterval(intervalId);
 if(count < maxCount) {
 count++;
 intervalId = setInterval(this, "executeCallback", duration, colors[count]);
 }
}

if(intervalId != null) {
 clearInterval(intervalId);
}

intervalId = setInterval(this, "executeCallback", duration, colors[count]);

示例 4:下面的示例演示如何正确地从 ActionScript 2.0 自定义类使用 setInterval()。请注意,与前面的示例类似,this 传递给 setInterval() 函数以确保被调用的方法在正确的范围内执行。


class CustomClass {
 private var intervalId:Number;
 private var count:Number = 0;
 private var maxCount:Number = 10;
 private var duration:Number = 20;

 public function CustomClass():Void {
 beginInterval();
 }

 private function beginInterval():Void {
 if(intervalId != null) {
 trace("clearInterval");
 clearInterval(intervalId);
 }
 intervalId = setInterval(this, "executeCallback", duration);
 }

 public function executeCallback():Void {
 trace("executeCallback intervalId: " + intervalId + " count: " + count);
 if(count >= maxCount) {
 clearInterval(intervalId);
 }
 count++;
 }
}

在新文档中,实例化新类的一个新实例:


var custom:CustomClass = new CustomClass();

请参阅

clearInterval 函数, updateAfterEvent 函数, class 语句