Как вы останавливаете функцию setInterval? - PullRequest
0 голосов
/ 10 ноября 2009

У меня есть функция, которую я хочу запускать с интервалом в кадре. Я использую следующий код для запуска функции:

var intervalID = setInterval(intervalFunction, 3000);

Затем в кнопке onRelease я хочу остановить функцию. В onRelease я делаю переход на другой фрейм.

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

Функция periodFunction продолжает выполняться. Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 10 ноября 2009

Я согласен с 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");
}

(ни один из них не проверен)

1 голос
/ 10 ноября 2009

Не уверен, решит ли это вашу проблему или нет, но если вам нужен таймер для запуска только один раз, вы можете использовать setTimeout (). Единственная разница между этим и setInterval () заключается в том, что setInterval () повторяется, а setTimeout () - нет. Вот несколько примеров .

[EDIT] Перечитав вопрос, вы, вероятно, можете проигнорировать первый абзац, хотя примеры могут все же помочь. [/ EDIT]

Отвечая на ваш конкретный вопрос, не похоже, что вы делаете что-то не так. Возможно, это глупый вопрос, но содержит ли intervalID правильное значение в отладчике при вызове clearInterval?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...