2009-11-10 108 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"); 
} 

(这些都不是测试)