setInterval 函数

setInterval(functionName:Object, interval:Number [, param1:Object, param2, ..., paramN]) : Number setInterval(objectName:Object, methodName:String, interval:Number [, param1:Object, param2, ..., paramN]) : Number

在播放 SWF 文件时,每隔一定时间就调用函数或对象的方法。可以使用间隔函数更新数据库中的变量或更新时间显示。

如果 interval 大于 SWF 文件的帧速率,则仅在播放头每次进入某个帧时才调用间隔函数;这就尽可能减小了每次刷新屏幕时所产生的影响。

注意在 Flash Lite 2.0 中,如果传入此方法的间隔小于 SWF 文件的帧速率,则会忽略该间隔,并且仅以 SWF 文件的帧速率间隔调用间隔函数。如果该间隔大于 SWF 文件的帧速率,则会在经过该间隔后的下一帧上调用该事件。

参数

functionName:Object ― 函数名称或对匿名函数的引用。

interval:NumberfunctionNamemethodName 参数调用的间隔时间(以毫秒为单位)。

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

objectName:Object ― 包含 methodName 方法的对象。

methodName:StringobjectName 的方法。

返回

Number ― 可传递给 clearInterval() 以取消间隔的标识整数。

示例

用法 1:下面的示例每隔 1000 毫秒(1 秒)调用一个匿名函数。

setInterval( function(){ trace("interval called"); }, 1000 );

用法 2:下面的示例定义两个事件处理函数并调用它们中的每一个。第一个 setInterval() 调用将调用 callback1() 函数,该函数包含 trace() 语句。第二个 setInterval() 调用将 "interval called" 字符串作为参数传递给函数 callback2()

function callback1() {
 trace("interval called"); 
}

function callback2(arg) { 
 trace(arg);
}

setInterval( callback1, 1000 ); 
setInterval( callback2, 1000, "interval called" );

用法 3:此示例使用对象的方法。在想要调用为对象定义的方法时,您必须使用该语法。

obj = new Object();
obj.interval = function() { 
 trace("interval function called"); 
}

setInterval( obj, "interval", 1000 ); 

obj2 = new Object();
obj2.interval = function(s) { 
 trace(s); 
}
setInterval( obj2, "interval", 1000, "interval function called" );

必须使用 setInterval() 语法的第二种形式来调用对象的方法,如下面的示例所示:

setInterval( obj2, "interval", 1000, "interval function called" );

使用此函数时,需要注意在 SWF 文件中使用的内存。例如,从 SWF 文件中删除影片剪辑时,不会删除在其中运行的任何 setInterval() 函数。使用完 setInterval() 函数后,请始终使用 clearInterval() 函数将其删除,如下面的示例所示:

// create an event listener object for our MovieClipLoader instance
var listenerObjectbject = new Object();
listenerObject.onLoadInit = function(target_mc:MovieClip) {
 trace("start interval");
 /* after the target movie clip loaded, create a callback which executes 
 about every 1000 ms (1 second) and calls the intervalFunc function. */
 target_mc.myInterval = setInterval(intervalFunc, 1000, target_mc);
};
function intervalFunc(target_mc) {
 // display a trivial message which displays the instance name and arbitrary text.
 trace(target_mc+" has been loaded for "+getTimer()/1000+" seconds.");
 /* when the target movie clip is clicked (and released) you clear the interval 
 and remove the movie clip. If you don't clear the interval before deleting 
 the movie clip, the function still calls itself every second even though the 
 movie clip instance is no longer present. */
 target_mc.onRelease = function() {
 trace("clear interval");
 clearInterval(this.myInterval);
 // delete the target movie clip
 removeMovieClip(this);
 };
}
var jpeg_mcl:MovieClipLoader = new MovieClipLoader();
jpeg_mcl.addListener(listenerObject);
jpeg_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg", 
 this.createEmptyMovieClip("jpeg_mc", this.getNextHighestDepth()));

如果在类中使用 setInterval(),您需要确保在调用该函数时使用 this 关键字。如果不使用该关键字,setInterval() 函数就无法访问类成员。下面的示例说明了这一点。对于一个具有名为 deleteUser_btn 的按钮的 FLA 文件,将以下 ActionScript 添加到第 1 帧上:

var me:User = new User("Gary");
this.deleteUser_btn.onRelease = function() {
 trace("Goodbye, "+me.username);
 clearInterval(me.intervalID);
 delete me;
};

然后在 FLA 文件所在的同一目录中创建一个名为 User.as 的文件。输入以下 ActionScript:

class User {
 var intervalID:Number;
 var username:String;
 function User(param_username:String) {
 trace("Welcome, "+param_username);
 this.username = param_username;
 this.intervalID = setInterval(this, "traceUsername", 1000, this.username);
 }
 function traceUsername(str:String) {
 trace(this.username+" is "+getTimer()/1000+" seconds old, happy birthday.");
 }
}

请参阅

clearInterval 函数