相信你們對setInterval方法確定很是熟悉,但很多人對其缺少深刻的瞭解,導致當一個flash裏有多個setInterval的時候就容易混淆,該清除的間隔lID沒有清除,不應清除的時候卻清除了。對於setInterval的語法我就不贅述,不少文章都有詳細說明,下面來講一下 setInterval的幾個重點。html
一、setInterval和clearInterval都是全局函數,也就是_global.setInterval()和_global.clearInterval()。編程
這一點你們應該都知道,可是可能並無特別注意。不過這點對咱們理解他們很是重要。setInterval的返回值是一個間隔lID(數字),因此這個間隔lID也是全局的。好比下面的代碼:ide
var rootID=setInterval(_root,"test",500,"rootID");函數
function test(arg)idea
{ spa
trace(arg);code
}htm
咱們用clearInterval(rootID)和用clearInterval(1)的做用是同樣的。對象
二、每一次調用setInterval,就會返回一個間隔lID,這個ID數值爲全局setInterval的調用次數。blog
好比下面的代碼:
var rootID=setInterval(_root, "test", 500, "rootID");
btn1.onPress=function()
{
setInterval(_root, "test", 500, "btn1_ID");
}
btn2.onPress=function(){
setInterval(_root, "test", 500, "btn2_ID");
}
function test(arg)
{
trace(arg);
}
在這個例子裏,咱們能夠用clearInterval(1)來清除間隔rootID。假如咱們先點擊btn1再點擊btn2,那麼就能夠用 clearInterval(2)來清除點擊btn1所產生的間隔ID,而用clearInterval(3)來清除點擊btn2所產生的間隔ID。相反,若是咱們先是點擊btn2再點擊btn1,那麼clearInterval(2)則是清除點擊btn2所產生的間隔ID.
三、給間隔lID添加標識符 在實際編程中,用上面的clearInterval(數字)這樣的方式當然能夠清除間隔ID,可是一旦ID過多,咱們就會沒法識別該清除哪一個ID。所以給間隔lID添加標識符就顯得很是重要。可是必須把他分配到一個對象的成員變量中。 好比下面的代碼:
newtest();
function newtest()
{
var newID=setInterval(_root,"test",500,"btn2_ID");
}
function test(arg)
{
trace(arg);
}
這樣的標識方法就是錯誤的,由於testID是一個局部變量,僅做用於new方法內。於是沒法在其餘地方用clearInterval(newID)來清除此間隔。而去掉前面的var就能夠了(此時newID是_root的一個成員變量)。
四、增長一個清除loadMovieNum加載進來swf的間隔ID的例子:
在IntervalID2.swf文件裏的有個間隔ID:
var IntervalID2=setInterval(_root,"test",1000,"IntervalID2");
function test(arg)
{
trace(arg);;
}
在IntervalID1.swf裏:
loadMovieNum("IntervalID2.swf",1)
btn1.onPress = function(){
clearInterval(_level1.IntervalID2)
IntervalID1=setInterval(_root,"test",2000,"IntervalID1";
};
btn2,onPress =
function(){
clearInterval(2)
//clearInterval(IntervalID1)
};
function test(arg){
trace(arg);
}
在此例中,若是咱們先點擊btn1再點擊btn2,那麼2個間隔ID都會刪除,而若是先點擊btn2,那麼IntervalID1是沒有清除的。明白上面三點後,這些應該就是顯而易見的了。
總結:瞭解了上面幾個重點後,我想使用setInterval方法就會一清二白了,不會怕setInterval了而clearInterval不了的狀況了。若有錯誤,敬請指正。