diff --git a/script.js b/script.js index e2d0297..ec8f3d4 100644 --- a/script.js +++ b/script.js @@ -1 +1,203 @@ // Please implement exercise logic here + +//timer display container +let timeDisplay = document.createElement("div"); +timeDisplay.classList.add("display"); +document.body.appendChild(timeDisplay); + +//default time display +let hour = 00; +let minute = 00; +let second = 00; +timeDisplay.innerHTML = timeDisplay.innerHTML = + "Time Elapsed: " + + ("0" + `${hour}`).slice(-2) + + ":" + + ("0" + `${minute}`).slice(-2) + + ":" + + ("0" + `${second}`).slice(-2); + +let totalTime = 0; + +//default ending time is 3 mins +const endTimeInMillisec = 180000; +let timeInterval; + +// display the timer each second +const displaySec = 1000; + +//Start button +let startButton = document.createElement("button"); +startButton.classList.add("button", "green"); +startButton.innerHTML = "Start"; +document.body.appendChild(startButton); + +//when start button is triggered +startButton.addEventListener("click", () => { + console.log("START BUTTON PRESSED"); + // clearing time interval everytime when the button gets clicked + clearInterval(timeInterval); + // updateClock(); + timeInterval = setInterval(updateClock, displaySec); +}); + +//Stop button +let stopButton = document.createElement("button"); +stopButton.classList.add("button", "red"); +stopButton.innerHTML = "Stop"; +document.body.appendChild(stopButton); + +// when stop button is triggered +stopButton.addEventListener("click", () => { + console.log("STOP BUTTON PRESSED"); + + //record the paused time in case we need to resume it later + let pausedTime = totalTime; + console.log(pausedTime); + clearInterval(timeInterval); +}); + +//reset button +let resetButton = document.createElement("button"); +resetButton.classList.add("button", "yellow"); +resetButton.innerHTML = "Reset"; +document.body.appendChild(resetButton); + +resetButton.addEventListener("click", () => { + console.log("RESET BUTTON PRESSED"); + totalTime = 0; + clearInterval(timeInterval); + updateClock(); + + //clearing the lap display + lapDisplay.innerHTML = ""; + + //clearing laptimes array + lapTimes = []; + counter = 1; + + //clearing split records + splitDisplay.innerHTML = ""; + splitTimesRecord = []; +}); + +//lap button +let lapButton = document.createElement("button"); +lapButton.classList.add("button", "blue"); +lapButton.innerHTML = "Lap"; +document.body.appendChild(lapButton); + +//lap display container +let lapDisplay = document.createElement("div"); +lapDisplay.classList.add("display"); +document.body.appendChild(lapDisplay); + +//lap counter +let counter = 1; +let lapTimes = []; + +//when lap button is triggered +lapButton.addEventListener("click", () => { + // minus 1000ms as laptime is always 1s ahead + + let lapTime = totalTime - 1000; + let hour = convertTime(lapTime)[0]; + let minute = convertTime(lapTime)[1]; + let second = convertTime(lapTime)[2]; + lapTimes.push(lapTime); + console.log(lapTimes); + + lapDisplay.innerHTML += + "Lap No." + + `${counter}` + + ": " + + ("0" + `${hour}`).slice(-2) + + ":" + + ("0" + `${minute}`).slice(-2) + + ":" + + ("0" + `${second}`).slice(-2) + + "
"; + + counter += 1; + + // displaying split times + split(lapTimes); +}); + +//lap display container +let splitDisplay = document.createElement("div"); +splitDisplay.classList.add("display"); +document.body.appendChild(splitDisplay); + +//split time calc +let splitTime; +let splitCounter = 1; +let splitTimesRecord = []; + +function split(lapTimes) { + // empty the display everytime + splitDisplay.innerHTML = ""; + + // if there is more than 1 laps + if (lapTimes.length > 1) { + // loop over lapTimes.length + splitCounter = 1; + for (i = 0; i < lapTimes.length - 1; i++) { + splitTime = lapTimes[i + 1] - lapTimes[i]; + + // converting them to proper time format + let hour = convertTime(splitTime)[0]; + let minute = convertTime(splitTime)[1]; + let second = convertTime(splitTime)[2]; + + splitTimesRecord.push([hour, minute, second]); + // console.log(splitTimesRecord); + + splitDisplay.innerHTML += + "Split No." + + `${splitCounter}` + + ": " + + ("0" + `${hour}`).slice(-2) + + ":" + + ("0" + `${minute}`).slice(-2) + + ":" + + ("0" + `${second}`).slice(-2) + + "
"; + splitCounter += 1; + } + } +} + +function updateClock() { + let hour = convertTime(totalTime)[0]; + let minute = convertTime(totalTime)[1]; + let second = convertTime(totalTime)[2]; + + // let hour = Math.floor((totalTime / (1000 * 60 * 60)) % 24); + // let minute = Math.floor((totalTime / 1000 / 60) % 60); + // let second = Math.floor((totalTime / 1000) % 60); + + timeDisplay.innerHTML = + "Time Elapsed: " + + ("0" + `${hour}`).slice(-2) + + ":" + + ("0" + `${minute}`).slice(-2) + + ":" + + ("0" + `${second}`).slice(-2); + + if (totalTime >= endTimeInMillisec) { + clearInterval(timeInterval); + } + + totalTime += 1000; + console.log(totalTime); +} + +//convert millisecs to hours, minutes, seconds +function convertTime(totalTime) { + let hour = Math.floor((totalTime / (1000 * 60 * 60)) % 24); + let minute = Math.floor((totalTime / 1000 / 60) % 60); + let second = Math.floor((totalTime / 1000) % 60); + + return [hour, minute, second]; +} diff --git a/styles.css b/styles.css index 04e7110..9a3039b 100644 --- a/styles.css +++ b/styles.css @@ -1,3 +1,30 @@ body { background-color: pink; } + +.display { + margin: 10px; + padding: 10px; + background-color: white; +} + +.button { + margin: 10px; + padding: 10px; +} + +.green { + color: green; +} + +.red { + color: red; +} + +.yellow { + color: black; +} + +.blue { + color: blue; +}