2016-01-09 10 views
1

Длительность сеанса - это время начала таймера, по умолчанию - 25. isEven используется для запуска/остановки таймера, если isEven является ложным, таймер должен начинаться, если он нечетный, он должен ударить clearInterval , который по какой-то причине не останавливает выполнение функции tick() (которая отсчитывает таймер).clearInterval() не работает

var count = 0; 

function countdown(sessionLength) { 
    var minutes = sessionLength - 1; 
    var seconds = 60; 
    var isEven = false; 
    count++; 

    if (count % 2 == 0) { 
    isEven = true; 
    } else { 
    isEven = false; 
    } 

    var myVar = setInterval(tick, 1000); 

    if (isEven == false) { 
    function tick() { 
     if (seconds > 0) { 
     seconds--; 
     } else { 
     minutes--; 
     seconds = 59; 
     } 

     if (minutes > 0) { 
     document.getElementById("time").innerHTML = 
      minutes.toString() + ":" + (seconds < 10 ? "0" : "") + seconds.toString(); 
     } else { 
     document.getElementById("time").innerHTML = 
      "0:" + (seconds < 10 ? "0" : "") + seconds.toString(); 
     } 
    } 
    } else { 
    console.log("reached"); 
    clearInterval(myVar); 
    } 
}; 
+0

Вы передаете галочку в setInterval, когда она фактически не существует (поскольку она находится в блоке if) – Araymer

ответ

0

Переместить декларацию tick() функции за пределами блока if

0

setInterval переменная является локальной. Поэтому его значение перезаписывается каждый раз, когда вы звоните countdown

. Решение будет инициализировать myVar вне функции countdown или сделать его глобальной переменной, как это:
window.myVar =setInterval (tick,1000);

Вы должны также поместить эту команду в первом if блоке, так что он не перезаписывается каждый раз

var count = 0; 
function countdown(sessionLength) { 
var minutes = sessionLength - 1; 
var seconds = 60; 
var isEven = false; 
count++; 
if (count % 2 == 0) { 
    isEven = true; 
} else { 
    isEven = false; 
} 
if (isEven == false) { 
    window.myVar = setInterval(tick, 1000); 
    function tick() { 
     if (seconds > 0) { 
      seconds--; 
     } else { 
      minutes--; seconds = 59; 
     } 
     if (minutes > 0) { 
     document.getElementById("time").innerHTML = minutes.toString() + ":" + (seconds < 10 ? "0" : "") + seconds.toString(); 
    } else { 
      document.getElementById("time").innerHTML = "0:" + (seconds < 10 ? "0" : "") + seconds.toString(); 
    } 
    } 
} else { 
    console.log("reached"); 
    if (window.myVar){ 
      clearInterval(window.myVar); 
      window.myVar = null; 
     } 
} 
}; 
+0

Благодарим за ваш ответ. В последнем случае если утверждение if (window.myVar) оценивается? Если myVar не имеет тип boolean, как он выполняет инструкцию? – RoryAvant

+0

В javascript 'if (variable)' return false, если 'variable' является логическим значением false, null, undefined или empty. В противном случае он возвращает 'true'. Я добавил это в ваш случай, потому что myVar не обязательно определен в этот момент, или он может быть пустым – ikken

+0

Пожалуйста, дайте мне знать, если это поможет.thx – ikken

Смежные вопросы