обновить отложенную функцию в JavaScript - PullRequest
0 голосов
/ 20 мая 2018

У меня есть простая функция javascript, которая загружает готовый документ:

var start = 1;
var speed = 1000;
    $(document).ready(function () {
        go();
        setInterval(function () {
            go();
        }, speed);

Это функция в деталях:

function go() {
    $("#score").html(start.toLocaleString());
    start += 1;
}

Это счетчик, который начинается с номера 1до бесконечности, со скоростью 1000 миллисекунд.Теперь вот что: у меня есть другая функция:

function modify() {
  speed = 500;
}

, которая регулирует скорость setIntval в основной функции.Проблема в том, что это относится только к обновлению страницы.Как мне обновить его в режиме реального времени без обновления страницы?

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

Действительно простое решение - использовать 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>
0 голосов
/ 20 мая 2018

Вы не можете обновить текущий, вы должны остановить его и установить новый таймер, который делает то же самое, но с другой задержкой.

var speed = 1000;
var start = 1;
function go() {
    $("#score").html(start.toLocaleString());
    start += 1;
}

function startGoTimer(){
  return = setInterval(function () {
      go();
    }, speed);
}

function modifyTimer( previousTimer, newDelay=500) {
    clearInterval(previousTimer);
    speed = newDelay;
    startGoTimer();
}

var timer = startGoTimer();
// Some code
modifyTimer(timer, 500);

Ради интереса, я только что проверилчто произойдет, если вы просто измените время:

var timing = 1000;
var interval = setInterval(function(){console.log("test")}, timing);
// Now we get a log every 1000ms, change the var after some time (via console):
timing = 10;
// still an interval of 1000ms.
...