Действительно простое решение - использовать setInterval
параметры ,
var intervalID = scope.setInterval(func, delay[, param1, param2, ...]);
, а также передать speed
как param1 .
Затем, на каждом интервале, проверять, не изменилось ли оно, и если, очистить существующий таймер и запустить новый.
Фрагмент стека
var start = 1;
var speed = 1000;
var timer;
$(document).ready(function() {
go();
timer = setInterval(function(p) {
go(p);
}, speed, speed);
// for this demo
$("button").click(function(){ speed = speed/2});
})
function go(p) {
if(p && p != speed) {
clearInterval(timer);
timer = setInterval(function(p) {
go(p);
}, speed, speed);
}
$("#score").html(start.toLocaleString());
start += 1;
}
div {
display: inline-block;
width: 40px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="score">0</div>
<button>Modify</button>