setInterval 函數(shù)是Action Script 的全局函數(shù),在Action Script 3.0 中它 被封裝在 flash.util 包中,詳見(jiàn)http://livedocs.macromedia.com/labs/1/flex/langref/migration.html, 它需要flash player 6 或以上版本的支持。
setInterval 有兩種用法:
1.? setInterval(functionName:Function, interval:Number [, param1:Object
,
param2
, ...,
paramN
])
: Number
這種使用方法是讓flash player 每隔interval (ms)時(shí)間調(diào)用functionName()這個(gè)函數(shù),不關(guān)心這個(gè)方法是哪個(gè)對(duì)象的,后面跟傳入的參數(shù);一般來(lái)說(shuō)這些參數(shù)值用來(lái)為函數(shù)提供數(shù)據(jù),而不是從函數(shù)里取出數(shù)據(jù)。
2.? setInterval(obj:Object, methodName:Function, interval:Number [, param1:Object
,
param2
, ...,
paramN
])
: Number
這種方法調(diào)用obj 對(duì)象中的成員方法methodName,在flex 應(yīng)用中必須使用這樣的方法來(lái)實(shí)現(xiàn)定時(shí)調(diào)用的效果。這樣的方式就能夠,在methodName中就能夠訪問(wèn)當(dāng)前flex application的 成員變量或函數(shù)了。舉個(gè)例子:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application? initialize="initFunc()" xmlns:mx="http://www.macromedia.com/2003/mxml">
?<mx:Script>
?<![CDATA[
??var count:Number;
??function initFunc()
??{
???count = 60;
???setInterval(this, "countDown", 1000);
??}
??
??function countDown()
??{
???showLabel.text = count.toString() + "second to go";
???count -= 1;
???if(count == 0)
????timeUp();
??}
??
??function timeUp()
??{
???alert("Time is up");
??}
?]]>
?</mx:Script>
?<mx:Label id="showLabel"/>
</mx:Application>
如果這里使用第一種方法的話 就會(huì)出現(xiàn) countDown 函數(shù)不能訪問(wèn)到count 和 showLabel 這兩個(gè)變量,功能就沒(méi)法實(shí)現(xiàn),雖然可以通過(guò)傳參數(shù)的方法來(lái)傳入count 和 label:
setInterval(countDown, 1000, count:Number, showLabel:mx.controls.Label);
但是這樣話 count-=1 并不起作用,所以根本不會(huì)count down。這個(gè)搞了我好久,開(kāi)始沒(méi)有看到第二種用法,大家要留意。
好看一點(diǎn)的例子:
?function init()
?{
? var spanSec:Number=60*60 //an hour to go
? var nf:mx.formatter.NumberFormatter = new mx.formatters.NumberFormatter();
? nf.precision = 0;
??nf.rounding = "down";
?}
?function timeCountDown()
?{
? var hr:Number =parseInt(nf.format(spanSec/3600));
??var min:Number = parseInt(nf.format((spanSec - hr*3600)/60));
??var sec:Number = parseInt(nf.format(spanSec - 60*min - hr*3600));
??spanSec = spanSec - 1;
??countDownLabel.text="Time left: "+hr+":"+min+":"+sec;?
??if(spanSec == 0)
??{
???submit();
??}
??
?}
?function submit()
?{
??? //do whatever you want
?}
posted on 2007-01-12 15:44
???MengChuChen 閱讀(800)
評(píng)論(0) 編輯 收藏 所屬分類:
flex2.0