代码之家  ›  专栏  ›  技术社区  ›  Paul Kelly

如何停止setInterval函数?

  •  0
  • Paul Kelly  · 技术社区  · 15 年前

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

    var intervalID = setInterval(intervalFunction, 3000);
    

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

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

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

    2 回复  |  直到 15 年前
        1
  •  1
  •   Chuck    15 年前

    不确定这是否解决了您的问题,但如果您只需要启动一次计时器,则可以使用setTimeout()。与setInterval()的唯一区别是setInterval()重复,而setTimeout()不重复。 Here's some examples

    [编辑]

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

        2
  •  1
  •   Jeremy White    15 年前

    我同意必和必拓的观点——试着检查intervalID的范围。出于测试目的,请使用绝对引用intervalID并查看是否得到相同的行为。

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

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

    (两个都没有经过测试)