【问题标题】:How do you stop a setInterval function?如何停止 setInterval 函数?
【发布时间】:2009-11-10 13:55:52
【问题描述】:

我有一个函数,我想在一帧内以一定间隔运行。我使用下面的代码来启动函数:

var intervalID = setInterval(intervalFunction, 3000);

然后,在按钮的 onRelease 中,我想停止该功能。在 onRelease 中,我转换到另一个框架。

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

intervalFunction 继续执行。我做错了什么?

【问题讨论】:

  • 应该可以,你能发布更多代码吗?
  • 已检查 clearInterval 是否被调用,即按钮的 onRelease 事件被正确触发和捕获。然后尝试寻找intervalID的范围。

标签: flash actionscript


【解决方案1】:

不确定这是否解决了您的问题,但如果您只需要计时器触发一次,您可以使用 setTimeout() 代替。它和 setInterval() 之间的唯一区别是 setInterval() 重复而 setTimeout() 不重复。 Here's some examples.

[编辑] 重新阅读问题后,您可能可以忽略第一段,尽管这些示例可能仍然有帮助。 [/编辑]

虽然解决了您的具体问题,但看起来您并没有做错什么。可能是一个愚蠢的问题,但是当调用 clearInterval 时,intervalID 是否在调试器中包含正确的值?

【讨论】:

  • 我确实在调试器中打印了 intervalID 的值,它看起来是有效的。
【解决方案2】:

我同意 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");
}

(这些都没有经过测试)

【讨论】:

    猜你喜欢
    • 2014-06-18
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    • 2021-01-30
    • 2014-02-12
    • 1970-01-01
    • 2010-12-22
    相关资源
    最近更新 更多