Search code examples
javascriptbuttonpageloadpause

Javascript paus/resume in one button


I have a struggle with one of my functions. What I would like to do is the timer start immediately after page load and that there is only one button with start/resume. I can't figure out in the code where I need to change the function. Can somebody help me? Thanks!

HTML:

<p id="komma">,</p>
<span id="time"></span>
<div id="buttons"><input type="button" value="start" onclick="start();" class="buttontimer">
<input type="button" value="stop" onclick="stop();"  class="buttontimer">
<input type="button" value="reset" onclick="reset()" class="buttontimer"> 
</div>

Javascript:

<script>
             // Simple example of using private variables
//
//  To start the stopwatch:
//      obj.start();
//
//  To get the duration in milliseconds without pausing / resuming:
//      var x = obj.time();
//
//  To pause the stopwatch:
//      var x = obj.stop(); // Result is duration in milliseconds
//
//  To resume a paused stopwatch
//      var x = obj.start();    // Result is duration in milliseconds
//
//  To reset a paused stopwatch
//      obj.stop();
//
 var    clsStopwatch = function() {
        // Private vars
        var startAt = 0;    // Time of last start / resume. (0 if not running)
        var lapTime = 0;    // Time on the clock when last stopped in milliseconds

        var now = function() {
                return (new Date()).getTime(); 
            }; 

        // Public methods
        // Start or resume
         this.start = function() {
                startAt = startAt ? startAt : now();
            };

        // Stop or pause
        this.stop = function() {
                // If running, update elapsed time otherwise keep it
                lapTime = startAt ? lapTime + now() - startAt : now();
                startAt = 0; // Paused
            };

        // Reset
        this.reset = function() {
                lapTime = startAt = 0; 
            }; 
    // Duration
        this.time = function() {
                return lapTime + (startAt ? now() - startAt : 0); 
            };
    }; 


var x = new clsStopwatch();
var $time;
var clocktimer;

function pad(num, size) {
    var s = "0000" + num;
    return s.substr(s.length - size);
}

function formatTime(time) {
    var s = ms = 0;
    var newTime = '';

    h = Math.floor( time / (60 * 60 * 1000) );
    time = time % (60 * 60 * 1000);
    m = Math.floor( time / (60 * 1000) );
    time = time % (60 * 1000);
    s = Math.floor( time / 60 + 2500);

     newTime =  pad(s,4) ;
         return newTime;

}


function show() {
    $time = document.getElementById('time');
    update();
}

 function update() {
    $time.innerHTML = formatTime(x.time());
}


function start() {
    clocktimer = setInterval("update()", 1);
    x.start();
}

function stop() {
    x.stop();
    clearInterval(clocktimer);
}

function reset() {
    stop();
    x.reset();
    update();
} 

Solution

  • Try this:

    <p id="komma">,</p>
    <span id="time"></span>
    <div id="buttons"><input type="button" value="stop" onclick="toggleTimer(event);" class="buttontimer">
    <input type="button" value="reset" onclick="reset()" class="buttontimer"> 
    </div>
    

    In JS:

    var isTimerStarted;
    
    function start() {
        clocktimer = setInterval("update()", 1);
        x.start();
        isTimerStarted = true;
    }
    
    function stop() {
        x.stop();
        clearInterval(clocktimer);
        isTimerStarted = false;
    }
    
    start();
    
    function toggleTimer(event) {
      if (isTimerStarted) {
        stop();
        event.target.value = 'Start';
      } else {
        start();
        event.target.value = 'Stop';
      }
    }
    

     var    clsStopwatch = function() {
            // Private vars
            var startAt = 0;    // Time of last start / resume. (0 if not running)
            var lapTime = 0;    // Time on the clock when last stopped in milliseconds
    
            var now = function() {
                    return (new Date()).getTime(); 
                }; 
    
            // Public methods
            // Start or resume
             this.start = function() {
                    startAt = startAt ? startAt : now();
                };
    
            // Stop or pause
            this.stop = function() {
                    // If running, update elapsed time otherwise keep it
                    lapTime = startAt ? lapTime + now() - startAt : now();
                    startAt = 0; // Paused
                };
    
            // Reset
            this.reset = function() {
                    lapTime = startAt = 0; 
                }; 
        // Duration
            this.time = function() {
                    return lapTime + (startAt ? now() - startAt : 0); 
                };
        }; 
    
    
    var x = new clsStopwatch();
    var $time;
    var clocktimer;
    
    function pad(num, size) {
        var s = "0000" + num;
        return s.substr(s.length - size);
    }
    
    function formatTime(time) {
        var s = ms = 0;
        var newTime = '';
    
        h = Math.floor( time / (60 * 60 * 1000) );
        time = time % (60 * 60 * 1000);
        m = Math.floor( time / (60 * 1000) );
        time = time % (60 * 1000);
        s = Math.floor( time / 60 + 2500);
    
         newTime =  pad(s,4) ;
             return newTime;
    
    }
    
    
    function show() {
        $time = document.getElementById('time');
        update();
    }
    
    show();
    
     function update() {
        $time.innerHTML = formatTime(x.time());
    }
    
    var isTimerStarted;
    
    function start() {
        clocktimer = setInterval("update()", 1);
        x.start();
        isTimerStarted = true;
    }
    
    function stop() {
        x.stop();
        clearInterval(clocktimer);
        isTimerStarted = false;
    }
    
    start();
    
    function toggleTimer(event) {
      if (isTimerStarted) {
        stop();
        event.target.value = 'Start';
      } else {
        start();
        event.target.value = 'Stop';
      }
    }
    
    function reset() {
        stop();
        x.reset();
        update();
    }
    <p id="komma">,</p>
    <span id="time"></span>
    <div id="buttons"><input type="button" value="stop" onclick="toggleTimer(event);" class="buttontimer">
    <input type="button" value="reset" onclick="reset()" class="buttontimer"> 
    </div>