Как запустить eggtimer после clearInterval()?

Есть яйцо, которое можно остановить после нажатия на кнопку "Стоп". Я хочу, чтобы этот таймер снова заработал (с того места, где он остановился) после нажатия кнопки "Отмена" в окне подтверждения. Любые предложения? Спасибо за помощь:)

<!DOCTYPE html>
<html>
<body onload="timer();">
<button onclick="exit();">stop</button>
    <p id="seconds">30</p>

    <script type="text/javascript">
        var clock;



        function timer () {
            var start = new Date().getTime();
            clock = setInterval(function() {
                var seconds = Math.round(30 - (new Date().getTime() - start) / 1000);
                if (seconds >= 0)
                    document.getElementById('seconds').innerHTML = seconds;
                else 
                    clearInterval(clock);



                    if (seconds==0) {window.location.href="something.com";
                    return;
                    }




            }, 1000);
        }

function exit(){

 clearInterval(clock);

var result = confirm("Are you leaving?");
if (result == true) {
window.location.href="somewhere.com";
}
else {
timer();} // <-- ????
}


    </script>
</body>
</html>

2 ответа

Решение

Вы можете создать переменную, которая будет содержать, в какие секунды вы находитесь;

var sec  = seconds;

Измени свою функцию timer с таймером, который вы хотите начать в качестве параметра

function timer (time)

var clock;
var sec;


function timer (time) {
  var start = new Date().getTime();
  clock = setInterval(function() {
    var seconds = Math.round(time - (new Date().getTime() - start) / 1000);
    sec = seconds;
    if (seconds >= 0){
      document.getElementById('seconds').innerHTML = seconds;
    }
    else{
      clearInterval(clock);
    }
    if (seconds==0){
      window.location.href="something.com";
      return;
    }
  }, 1000);
}

function exit(){
  clearInterval(clock);
  var result = confirm("Are you leaving?");
  if (result == true) {
    window.location.href="somewhere.com";
  }
  else {
  console.log(sec);
    timer(sec);} // <-- ????
}
<body onload="timer(30);">
  <button onclick="exit();">stop</button>
  <p id="seconds">30</p>
</body>

Вот рабочий пример.
Я переместил seconds переменная вне функции, поэтому она сохраняется и может быть использована для перезапуска таймера.
Кроме того, я добавил аргумент в timer() функция, чтобы можно было изменить количество отсчета.

Обратите внимание, что степень детализации находится на втором уровне, поэтому фактическое время обратного отсчета может в конечном итоге превысить 30 секунд, но я считаю, что это приемлемо в этом случае использования.

var clock;
var seconds;

function timer(wait) {
  var start = new Date().getTime();
  clock = setInterval(function() {
    seconds = Math.round(wait - (new Date().getTime() - start) / 1000);
    if (seconds >= 0)
      document.getElementById('seconds').innerHTML = seconds;
    else
      clearInterval(clock);

    if (seconds == 0) {
      window.location.href = "something.com";
      return;
    }
  }, 1000);
}

function exit() {

  clearInterval(clock);

  var result = confirm("Are you leaving?");
  if (result == true) {
    window.location.href = "somewhere.com";
  } else {
    timer(seconds);
  } // <-- ????
}

timer(30);
<button onclick="exit();">stop</button>
<p id="seconds">30</p>

Другие вопросы по тегам