2016-02-16 2 views
2

У меня есть эта скрипку: https://jsfiddle.net/reko91/stfnzoo4/Как изменить интервал динамически при использовании setInterval

Im в настоящее время использует Javascripts setInterval() для входа строки на консоль.

Что я хочу сделать, находится в этой функции setInterval, чтобы проверить, изменилась ли переменная интервала, если она есть, изменить интервал в функции setInterval. Я могу уменьшить интервал переменной на 100 (ускорение функции вверх) одним нажатием кнопки.

Возможно ли это?

Кто-то говорил об этом: Changing the interval of SetInterval while it's running

Но это с помощью счетчика, поэтому они работают только это определенное количество раз. Мне нужно запустить его так долго, но измените, как быстро функция снова вызвана.

Вот код:

var interval = 2000; 
 

 
setInterval(function() { 
 
    interval = getInterval(); 
 
    console.log('interval') 
 
}, interval); 
 

 

 
function getInterval() { 
 
    return interval; 
 
} 
 

 

 
$('#speedUp').on('click', function() { 
 
    interval -= 100; 
 
    console.log(interval) 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button id='speedUp'> 
 
    speed up 
 
</button>

+3

Возможный Дублировать e of [Изменение интервала SetInterval во время его запуска] (http://stackoverflow.com/questions/1280263/changing-the-interval-of-setinterval-while-its-running) – brod

ответ

1

Я бы просто остановить интервал и начать новую с разными сроками

var interval = 2000; 
 
var intervalId; 
 

 
// store in a function so we can call it again 
 
function startInterval(_interval) { 
 
    // Store the id of the interval so we can clear it later 
 
    intervalId = setInterval(function() { 
 
    console.log(_interval); 
 
    }, _interval); 
 
} 
 

 

 
function getInterval() { 
 
    return interval; 
 
} 
 

 

 
$('#speedUp').on('click', function() { 
 
    interval -= 100; 
 
    // clear the existing interval 
 
    clearInterval(intervalId); 
 
    // just start a new one 
 
    startInterval(interval); 
 
    console.log(interval) 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button id='speedUp'> 
 
    speed up 
 
</button>

+0

Отлично, был один ответ на я упомянул, что это похоже на это, но это отвечает на него совершенно. Спасибо – thatOneGuy

+0

Yup, тот, который был связан, состоял в последовательных изменениях интервала, хотя ваш случай требует его динамического изменения. вы можете предварительно установить «тайминги» и позволить пользователю выбрать: p EX. «Иди супер быстро!», «черепаха медленно!» –

+0

именно то, что мне нужно для этого;) Еще раз спасибо – thatOneGuy