Files
chronometer/Chronometer.js
T
2022-02-23 13:23:22 +01:00

81 lines
1.8 KiB
JavaScript

/*
* Chronometer.js, 23/02/2022
* no copyright, no rights
*/
/**
* Simple chronometer
* @author Lucas Vbr
*/
class Chronometer {
/**
* Create a new Chronometer
* @param element HTML element that will content the display of the chronometer
* @param time Initialize the timer (0 by default)
* @param separator Set the separator between digits (":" by default)
*/
constructor(element, time = 0, separator = ":") {
this.element = element;
this.time = time;
this.isCounting = false;
this.separator = separator;
this.update();
}
/**
* Diplay in the HTML element the current value of the timer as HH:mm:ss
*/
update() {
let seconds = this.convertTwoDigits(this.time % 60);
let minuts = this.convertTwoDigits(Math.floor(this.time / 60) % 60);
let hours = this.convertTwoDigits(Math.floor(this.time / 3600) % 24);
this.element.innerText = hours + this.separator + minuts + this.separator + seconds
}
/**
* Convert a number with 2 digits string
* @param number Integer number
* @returns {string} Formated String with 2 digits number
*/
convertTwoDigits(number) {
return number.toLocaleString("fr", {
minimumIntegerDigits: 2,
useGrouping: false,
});
}
/**
* Start the chronometer
*/
start() {
if (!this.isCounting) {
console.debug("Start");
this.isCounting = true;
this.interval = setInterval(() => {
this.time++;
this.update();
}, 1000)
}
}
/**
* Stop the chronometer
*/
stop() {
if (this.isCounting) {
clearInterval(this.interval);
this.isCounting = false;
}
}
/**
* Stop the chonometer and set the time to 0
*/
clear() {
this.stop();
this.time = 0;
this.update(); /* Update the view */
}
}