Search code examples
javascriptcountdown

Creating a Countdown with JavaScript


I am trying to make a Countdown that just log in the terminal the seconds remaining. It should be an interval of 1 second between every log. It has to be as a method of an object. I don´t know if it's because of the scope but somehow it's not working after many trials and code-rewriting.

Anybody can help me with this?

var Countdown = function(seconds) {
    this.counter = seconds;
    this.start = function() {
        setTimeout(
            function() {
                while (this.counter >= 0) {
                    console.log(this.counter);
                    this.counter -= 1;
                }
            },1000)
    }
}

Solution

  • I would use a setInterval() for a simple countdown timer. I would also write my function for the math loop outside of the setInterval and then call on the function within the interval, like the following => setInterval(timerFunction(), 1000). There is no need for a loop when you use the interval, it does the looping each defined time increment as set in your setInterval(). Each time the interval fires, the function will do its thing.

    EDIT: added a conditional to see if the interval time has run out.

    I have included an example of a simple count down timer in my answer below along with notation inside the code that helps to explain further. Hope this helps.

    Also, by terminal, I assume you mean the console? My example displays the setInterval in the console...

    let sMin = 2; // amount of minutes you wish to start with
    let time = sMin * 60; // format for minutes by multiplying by 60 as we have 60 seconds in each minute
    
    let countdown = setInterval(update, 1000) // set up a setInterval for the countdown function
    // create a function that will countdown the seconds
    function update() {
      // define our minutes using Math.floor(time / 60)
      let min = Math.floor(time / 60);
      // define our seconds by modulating time with 60, our seconds units
      let sec = time % 60;
      
      // tenerary conditional to see if seconds is set to 0 for proper display of formatting as seconds 
      sec = sec < 10 ? '0' + sec : sec;
      // display the countdown timer in time format using the minutes and seconds variables
      console.log(`${min}:${sec}`);
      // decrement time by one second with each interval as set in the setInterval call `1000`
      time--;
      // clear the interval if the minutes and seconds are both set to 0
      min == 0 && sec == 0 ? clearInterval(countdown) : countdown;
      
    }