定時執行函數/清除定時執行函數

2010-06-12
使用setInterval()函數可依指定時間間隔,重複呼叫執行函數。呼叫clearIntervla()函數可終止setInterval()函數執行的函數。
以下為語法結構:
定時器物件變數 = setInterval( 欲執行的函數 , 時間設定 ) ※時間設定參數是以毫秒為單位 clearInterval ( 定時器物件變數 )
接下來,筆者就做個簡單小案例:
1.請先準備影像並放入影格中,如下圖所示。在圖中,筆者準備了分別命名為AS、text、photo的圖層。
AS圖層:可放置待會要撰寫的ActionScript 。
text圖層:分別放置了靜態文字(為識別使用,可不增加)。
photo圖層:分別放置了九張不同的影像內容。
setInterval01
2.在AS圖層中撰寫以下程式碼:
stop();
var myInterval:Number;
function photoShow():void{ 
  nextFrame(); 
}
myInterval = setInterval(photoShow,1000);

解說:
第一行的stop()是要讓場景的時間軸停止於第一格。
stop()
宣告一個myInterval的數值型態變數,用來存放setInterval產生的ID編號。 var myInterval:Number;
photoShow為一個自訂函數,內容為nextFrame();,也就是photoShow被呼叫時,就會前往下一格。
function photoShow():void{
    nextFrame();
}

最後一行的指令就是要以setInterval以固定的間隔時間去呼叫photoShow函數,利用setInterval函數以1000毫秒也就是1秒鐘的時間間隔去呼叫photoShow函數,而myInterval是用來做為setInterval的識別ID。
很難懂嗎?簡單來說~就是1秒鐘換一張圖啦!
myInterval = setInterval(photoShow,1000);
3.完成上述的程式碼撰寫即可完成,但欠缺一點考量~在這比較需要注意的是當影片播放到最後一張便停止了,那是因為沒有下一個影格了,所以停住,但...setInterval並沒有停止呼叫photoShow函數,這樣會浪費系統的資源。
因此,我們必須在不需要用到setInterval時將它清除掉,其指令為clearInterval。所以,筆者又將程式碼改寫如下:
function photoShow():void{
    if (currentFrame == totalFrames){
        clearInterval(myInterval)
    }else{
        nextFrame();
    }
}

解說:
currentFrame為目前影格
totalFrames為總影格數
在此筆者加入了判斷式在裡面,如果目前的影格位於最後一格即執行
clearInterval(myInterval),將setInterval清除掉,否則,就會前往下一格。
if (currentFrame == totalFrames){
    clearInterval(myInterval)
}else{
    nextFrame();
}


再來個舉一反三,如何讓它有循環效果呢?

各位也可以在利用setInterval再加上之前筆者所寫的 - 摩擦力(漸進移動) - 完成以下案例效果。 自己想想看吧~不能每次都靠老師~加油!!

沒有留言 :

張貼留言

Related Posts Plugin for WordPress, Blogger...