В чистом JavaScript я в настоящее время использую таймер, чтобы изменить шесть фоновых изображений. Я установил скрипт для бесконечного повторения цикла, пока открыто окно. Однако после первого цикла я хотел бы сбросить значение приращения таймера с 3250 миллисекунд до 7000 миллисекунд для всех циклов после того, как первый цикл завершился с более высокой скоростью.

<script>
  function shiftbackgrd(interval, frames) {
    var int = 1;

    function IncrementAnswersBkgrnds() {
        document.body.id = "b"+int;
        int++;
        if(int === frames) { int = 1; }
    }

    var swap = window.setInterval(IncrementAnswersBkgrnds, interval);
  }
  shiftbackgrd(3250, 7); //milliseconds, frames
</script>
1
GladHeart 29 Окт 2019 в 22:51

2 ответа

Лучший ответ

В основном вам нужно знать, когда переключаться, а затем использовать clearInterval для очистки старого и установки нового интервала. Вы можете использовать флаг, который устанавливается, когда ваш счетчик достигает значения.

function shiftbackgrd(interval, interval2, frames) {
  var int = 1;
  var allSeen = false

  function IncrementAnswersBkgrnds() {
    // do something
    console.log("call:", int);

    int++;
    if (int === frames) {
      int = 1;
      if (!allSeen) {
        console.log("All seen, changing to new interval")
        allSeen = true
        window.clearInterval(swap)
        swap = window.setInterval(IncrementAnswersBkgrnds, interval2)
      }
    }
  }

  var swap = window.setInterval(IncrementAnswersBkgrnds, interval);
}
shiftbackgrd(500, 1500, 7); //milliseconds, frames
1
Mark Meyer 29 Окт 2019 в 20:03

Если вам нужно всего лишь изменить его при первом вызове, вы можете просто использовать setTimeout для первого вызова, а затем после этого сделать функцию самостоятельной.

setTimeout(function () {
  shiftbackgrd(7000, 7); //milliseconds, frames
}, 3250)

С вашим исходным кодом вам все равно нужно, чтобы ваша функция shiftbackgrd немедленно вызывала IncrementAnswersBkgrnds прямо перед запуском setInterval, чтобы это полностью заработало.

0
Andrew 29 Окт 2019 в 19:55