2009-11-10 123 views
0

我有一個函數,我想在一個幀內間隔運行。我使用以下代碼啓動該功能:如何停止setInterval函數?

var intervalID = setInterval(intervalFunction, 3000); 

然後,在按鈕的onRelease中,我想停止該函數。在onRelease中,我轉換到另一個框架。

btn.onRelease = function() 
{ 
    clearInterval(intervalID); 
    gotoAndPlay("nextframe"); 
} 

intervalFunction繼續執行。我究竟做錯了什麼?

+1

這應該工作,你可以發佈更多的代碼? – Tom 2009-11-10 13:59:41

+1

已經檢查過正在調用clearInterval,即正在觸發並正確捕獲按鈕的onRelease事件。然後嘗試查找intervalID的範圍。 – bhups 2009-11-10 17:16:50

回答

1

不知道這是否解決了您的問題,但如果您只需要計時器觸發一次,則可以使用setTimeout()代替。那和setInterval()之間的唯一區別是setInterval()重複和setTimeout()不重合。 Here's some examples

[編輯] 重讀這個問題後,你可能會忽略第一段,雖然這些例子仍然有幫助。 [/編輯]

雖然解決你的具體問題,但它看起來並不像你做錯什麼。可能是一個愚蠢的問題,但是在調用clearInterval時,intervalID是否包含正確的值?

+0

我會在調試器中打印intervalID的值,它看起來有效。 – zooropa 2009-11-10 17:48:06

1

我同意bhups - 嘗試檢查intervalID的範圍。出於測試目的,請使用對intervalID的絕對引用並查看是否獲得相同的行爲。

btn.onRelease = function() 
{ 
    clearInterval(root.<<path to proper level>>.intervalID); 
    gotoAndPlay("nextFrame"); 
} 

如果您使用AS 3,您也可以嘗試切換到Timer類。

var timer:Timer = new Timer(3000); 
timer.addEventListener(TimerEvent.TIMER, intervalFunction); 
timer.start(); 

btn.addEventListener(MouseEvent.CLICK, btnClick); 

function btnClick(evt:MouseEvent):void 
{ 
    timer.stop(); 
    timer.removeEventListener(TimerEvent.TIMER, intervalFunction); 
    gotoAndPlay("nextFrame"); 
} 

(這些都不是測試)