Функция Javascript запускается только при перезагрузке страницы вручную - PullRequest
0 голосов
/ 20 мая 2019

У меня есть функция, которая работает как надо, но только если страница перезагружается после приземления на конкретную страницу.

Эта функция является функцией таймера, которая начинает снижаться с 10 до 0 при загрузке страницы (она должна работать следующим образом).

Но я попадаю на страницу и ничего не происходит.Когда я перезагружаю страницу, таймер запускается и работает ...

Я пробовал $ (document) .on и window.onload = function (), но безуспешно.

FlowRouter.route("/waitingForPlayer", {
  name: "waitingForPlayer",
  action() {
    BlazeLayout.render("iphone", { main: "waitingForPlayer" });
    console.log("first");
    window.onload = startTimer;

    function startTimer(duration, display) {
      console.log("second");
      var timer = duration,
        seconds;
      setInterval(function() {
        console.log("third");
        seconds = parseInt(timer % 60, 10);
        seconds = seconds < 10 ? "" + seconds : seconds;
        display.textContent = seconds;

        if (--timer < 0) {
          timer = duration;
        }
        if (timer == 0) {
          FlowRouter.go("readyForGame");
          document.location.reload(true);
        }
      }, 1000);
    }

    window.onload = function() {
      var fiveMinutes = 10,
        display = document.querySelector("#time");
      startTimer(fiveMinutes, display);
    };
  }
});

Когда таймер = 0, flowrouter меняет представление.

1 Ответ

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

Мне кажется, проблема в том, что вы поместили функцию onload в функцию обратного вызова маршрутизатора. Вам не нужно запускать window.onload внутри обратного вызова маршрутизатора, потому что это Single page application маршрутизатор. Попробуйте найти onComplete событие библиотеки потока-маршрутизатора. Я думаю, что action является обратным вызовом для завершения события маршрутизатора.

Пример:

function startTimer(duration, display) {
  console.log("second");
  var timer = duration, seconds;

  setInterval(function() {
    console.log("third");
    seconds = parseInt(timer % 60, 10);
    seconds = ('0' + seconds).slice(-2);

    display.innerText = seconds;

    if (--timer < 0) {
      timer = duration;
    }
    if (timer == 0) {
      FlowRouter.go("readyForGame");
    }
  }, 1000);
}

FlowRouter.route("/waitingForPlayer", {
  name: "waitingForPlayer",
  action: function() {
    BlazeLayout.render("iphone", { main: "waitingForPlayer" });
    console.log("first");

    var fiveMinutes = 10,
      display = document.querySelector("#time");
    startTimer(fiveMinutes, display);
  }
});

...