Перезапустить setInterval
Описание
Создал что-то подобное функции вызывающийся в каждом кадре:
class Program
{
FramesCount = 60;
}
setInterval
(
function()
{
//Тут какие то действия
},
1000 / Program.FramesCount
);
Проблема в том что Program.FramesCount пользователь может изменить и в этот момент функция setInterval() должен выполнять те же самые действия только с новой задержкой.
Вопрос
Как можно это реализовать?
Дополнение
Я искал в интернете на эту тему, наткнулся только на clearInterval, но как после этого запустить setInterval снова я так и не нашёл. Так что как ответ можете кидать ссылки на полезные статьи и другие сайты.
Ответы (2 шт):
Можно, например, так, чтобы значение каждый раз считывалось заново:
setTimeout(foo, 1000 / Program.FramesCount);
function foo() {
setTimeout(foo, 1000 / Program.FramesCount);
//Тут какие то действия
}
Альтернативы:
- Связать перезапуск таймера с кодом, устанавливающим
FramesCount. - Проверять текущее значение
FramesCountс переменной, хранящей прежнее значение, внутриfooи перезапускать таймер при изменении.
Возможно, проще изменить упомянутый фрагмент, чем менять всё это окружение. Но если постоянный пересчёт таймаута повлияет на производительность (сомневаюсь, но мало ли), альтернатива 1 может быть самой щадящей с точки зрения производительности, хотя и добавит связанности коду.
Можно просто определить setInterval в функцию и вызывать её после сброса
function playInterval() {
intervalId = setInterval(
function() {
//Тут какие то действия
if (условие, при котором сбрасывается интервал) {
clearInterval(intervalId);
setTimeout(()=>{
playInterval();
}, 1000)
}
},
), 3000;
}
playInterval();