如何在使用setInterval时动态更改间隔

时间:2016-02-16 20:22:07

标签: javascript jquery setinterval

我有这个小提琴:https://jsfiddle.net/reko91/stfnzoo4/

我目前正在使用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>

1 个答案:

答案 0 :(得分:2)

我只是停止间隔并开始一个具有不同时间的新间隔

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>