From ce71e6ea68d456252b5752824cba8d4ae04b4296 Mon Sep 17 00:00:00 2001 From: Amelia Wibisono Date: Wed, 24 Nov 2021 00:34:02 +0800 Subject: [PATCH 1/7] logic stopwatch --- index.html | 2 +- script.js | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+), 1 deletion(-) diff --git a/index.html b/index.html index 4771b50..a3de679 100644 --- a/index.html +++ b/index.html @@ -6,7 +6,7 @@ -

Timer!

+

Stopwatch!

diff --git a/script.js b/script.js index e2d0297..0a9969e 100644 --- a/script.js +++ b/script.js @@ -1 +1,96 @@ // Please implement exercise logic here +let handle = null; // for setInterval and clearInterval +let handle2 = null; +let start = true; +let prevTime = null; // for Date.now() difference with elapsedTime +let elapsedTime = 0; + +let split = false; +let prevSplitTime = null; +let elapsedSplitTime = 0; + +//build elements +const stopWatch = document.createElement("div"); +document.body.appendChild(stopWatch); +const splitContainer = document.createElement("div"); +document.body.appendChild(splitContainer); +let splitWatch; + +// stopwatch time display +const renderTime = (element, elapsed) => { + let tempTime = elapsed; + let milliseconds = tempTime % 1000; // get the remainder of 1000 ms which can go to second + tempTime = Math.floor(tempTime / 1000); //to get seconds + let seconds = tempTime % 60; // get the remainder of 60s which can go to minutes + tempTime = Math.floor(tempTime / 60); // to get minutes + let minutes = tempTime % 60; // get the remainder of 60mins which can go to hours + tempTime = Math.floor(tempTime / 60); // to get hours + let hours = tempTime % 60; //to get the remaider of hours + + //concat all the units above + let text = ""; + text += hours.toString().padStart(2, "0") + " : "; + text += minutes.toString().padStart(2, "0") + " : "; + text += seconds.toString().padStart(2, "0") + " : "; + text += milliseconds.toString().padStart(4, "0"); + element.innerHTML = text; + return element.innerHTML; +}; + +//start stopwatch for start and split +const startStopwatch = () => { + if (handle) return; //check flag + //console.log("This 1 line"); + if (start && !split) { + start = false; + handle = setInterval(function () { + if (!prevTime) { + prevTime = Date.now(); //to set the initial value of the time + } + elapsedTime += Date.now() - prevTime; //to get the difference between elapsed and 0; + prevTime = Date.now(); + renderTime(stopWatch, elapsedTime); + }, 100); + } + //console.log("This 2 line"); + if (split) { + //console.log("SPLIT"); + handle2 = setInterval(function () { + if (!prevSplitTime) { + prevSplitTime = Date.now(); //to set the initial value of the time + } + elapsedSplitTime += Date.now() - prevSplitTime; //to get the difference between elapsed and 0; + prevSplitTime = Date.now(); + }, 100); + } +}; + +//pause the stopwatch +const pauseStopwatch = () => { + clearInterval(handle); + handle = null; + prevTime = null; +}; + +//reset the stopwatch +const resetStopwatch = () => { + pauseStopwatch(); + elapsedTime = 0; + prevTime = 0; + start = true; + split = false; + renderTime(stopWatch, elapsedTime); +}; + +//split the stopwatch +const splitStopwatch = () => { + handle = null; + split = true; + splitWatch = document.createElement("div"); + splitContainer.appendChild(splitWatch); + startStopwatch(); + prevSplitTime = 0; + renderTime(splitWatch, elapsedSplitTime); + elapsedSplitTime = 0; + handle = ""; +}; From dd811922e949264c63aaecb91978383d6aa00d12 Mon Sep 17 00:00:00 2001 From: Amelia Wibisono Date: Wed, 24 Nov 2021 00:58:06 +0800 Subject: [PATCH 2/7] fix pause and split --- script.js | 40 +++++++++++++++++----------------------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/script.js b/script.js index 0a9969e..cc91064 100644 --- a/script.js +++ b/script.js @@ -2,11 +2,11 @@ let handle = null; // for setInterval and clearInterval let handle2 = null; let start = true; -let prevTime = null; // for Date.now() difference with elapsedTime +let prevTime = 0; // for Date.now() difference with elapsedTime let elapsedTime = 0; let split = false; -let prevSplitTime = null; +let prevSplitTime = 0; let elapsedSplitTime = 0; //build elements @@ -51,17 +51,7 @@ const startStopwatch = () => { prevTime = Date.now(); renderTime(stopWatch, elapsedTime); }, 100); - } - //console.log("This 2 line"); - if (split) { - //console.log("SPLIT"); - handle2 = setInterval(function () { - if (!prevSplitTime) { - prevSplitTime = Date.now(); //to set the initial value of the time - } - elapsedSplitTime += Date.now() - prevSplitTime; //to get the difference between elapsed and 0; - prevSplitTime = Date.now(); - }, 100); + split = true; } }; @@ -69,7 +59,7 @@ const startStopwatch = () => { const pauseStopwatch = () => { clearInterval(handle); handle = null; - prevTime = null; + prevTime = 0; }; //reset the stopwatch @@ -84,13 +74,17 @@ const resetStopwatch = () => { //split the stopwatch const splitStopwatch = () => { - handle = null; - split = true; - splitWatch = document.createElement("div"); - splitContainer.appendChild(splitWatch); - startStopwatch(); - prevSplitTime = 0; - renderTime(splitWatch, elapsedSplitTime); - elapsedSplitTime = 0; - handle = ""; + if (split && !start && handle !== null) { + splitWatch = document.createElement("div"); + splitContainer.appendChild(splitWatch); + handle2 = setInterval(function () { + if (!prevSplitTime) { + prevSplitTime = Date.now(); //to set the initial value of the time + } + elapsedSplitTime += Date.now() - prevSplitTime; //to get the difference between elapsed and 0; + prevSplitTime = Date.now(); + }, 100); + renderTime(splitWatch, elapsedSplitTime); + elapsedSplitTime = 0; + } }; From a788be858a52f40217988138b8c50bb20d119bd2 Mon Sep 17 00:00:00 2001 From: Amelia Wibisono Date: Wed, 24 Nov 2021 01:16:47 +0800 Subject: [PATCH 3/7] fix split --- script.js | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/script.js b/script.js index cc91064..ffea813 100644 --- a/script.js +++ b/script.js @@ -4,7 +4,7 @@ let handle2 = null; let start = true; let prevTime = 0; // for Date.now() difference with elapsedTime let elapsedTime = 0; - +let firstSplit = true; let split = false; let prevSplitTime = 0; let elapsedSplitTime = 0; @@ -69,22 +69,36 @@ const resetStopwatch = () => { prevTime = 0; start = true; split = false; + prevSplitTime = 0; + elapsedSplitTime = 0; + firstSplit = true; renderTime(stopWatch, elapsedTime); }; //split the stopwatch const splitStopwatch = () => { if (split && !start && handle !== null) { - splitWatch = document.createElement("div"); - splitContainer.appendChild(splitWatch); - handle2 = setInterval(function () { - if (!prevSplitTime) { - prevSplitTime = Date.now(); //to set the initial value of the time - } - elapsedSplitTime += Date.now() - prevSplitTime; //to get the difference between elapsed and 0; - prevSplitTime = Date.now(); - }, 100); - renderTime(splitWatch, elapsedSplitTime); - elapsedSplitTime = 0; + if (!firstSplit) { + console.log("not first split"); + splitWatch = document.createElement("div"); + splitContainer.appendChild(splitWatch); + renderTime(splitWatch, elapsedSplitTime); + elapsedSplitTime = 0; + } + if (firstSplit) { + firstSplit = false; + console.log("first split"); + splitWatch = document.createElement("div"); + splitContainer.appendChild(splitWatch); + handle2 = setInterval(function () { + if (!prevSplitTime) { + prevSplitTime = Date.now(); //to set the initial value of the time + } + elapsedSplitTime += Date.now() - prevSplitTime; //to get the difference between elapsed and 0; + prevSplitTime = Date.now(); + }, 100); + renderTime(splitWatch, elapsedTime); + elapsedSplitTime = 0; + } } }; From a7ce08bf46d29bf708658864047de9dcf72ffb5a Mon Sep 17 00:00:00 2001 From: Amelia Wibisono Date: Thu, 25 Nov 2021 22:32:45 +0800 Subject: [PATCH 4/7] finish stopwatch --- assets/play.png | Bin 0 -> 7081 bytes assets/reset.png | Bin 0 -> 7069 bytes assets/split.png | Bin 0 -> 15772 bytes assets/stop.png | Bin 0 -> 2014 bytes index.html | 7 ++++++ script.js | 56 ++++++++++++++++++++++++++++++++++++++++++++++- styles.css | 41 +++++++++++++++++++++++++++++++++- 7 files changed, 102 insertions(+), 2 deletions(-) create mode 100644 assets/play.png create mode 100644 assets/reset.png create mode 100644 assets/split.png create mode 100644 assets/stop.png diff --git a/assets/play.png b/assets/play.png new file mode 100644 index 0000000000000000000000000000000000000000..c23c87d5a1096d14b4ccb5956fa90cd77b06be1e GIT binary patch literal 7081 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 W( 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 K=d#Wzp$PzC{h9~> literal 0 HcmV?d00001 diff --git a/index.html b/index.html index a3de679..310c5d5 100644 --- a/index.html +++ b/index.html @@ -2,7 +2,14 @@ Timer + + + + diff --git a/script.js b/script.js index ffea813..8e2550c 100644 --- a/script.js +++ b/script.js @@ -9,10 +9,39 @@ let split = false; let prevSplitTime = 0; let elapsedSplitTime = 0; -//build elements +//build stopwatch elapsed time const stopWatch = document.createElement("div"); +stopWatch.classList.add("elapsed"); +stopWatch.innerHTML = `00 : 00 : 00 : 0000`; document.body.appendChild(stopWatch); + +// build interactive buttons +const imgContainer = document.createElement("div"); +imgContainer.classList.add("image-container"); +document.body.appendChild(imgContainer); +const goStart = document.createElement("img"); +goStart.classList.add("img", "start"); +goStart.src = "/assets/play.png"; +imgContainer.appendChild(goStart); +const goStop = document.createElement("img"); +goStop.classList.add("img", "stop"); +goStop.src = "/assets/stop.png"; +goStop.classList.add("disabled"); +imgContainer.appendChild(goStop); +const goReset = document.createElement("img"); +goReset.classList.add("img", "reset"); +goReset.src = "/assets/reset.png"; +goReset.classList.add("disabled"); +imgContainer.appendChild(goReset); +const goSplit = document.createElement("img"); +goSplit.classList.add("img", "split"); +goSplit.src = "/assets/split.png"; +goSplit.classList.add("disabled"); +imgContainer.appendChild(goSplit); + +// build split container to record lap const splitContainer = document.createElement("div"); +splitContainer.classList.add("split-container"); document.body.appendChild(splitContainer); let splitWatch; @@ -73,6 +102,7 @@ const resetStopwatch = () => { elapsedSplitTime = 0; firstSplit = true; renderTime(stopWatch, elapsedTime); + splitContainer.innerHTML = ""; }; //split the stopwatch @@ -102,3 +132,27 @@ const splitStopwatch = () => { } } }; + +//add event listener to each button +goStart.addEventListener("click", function () { + startStopwatch(); + goStart.classList.add("disabled"); + goSplit.classList.remove("disabled"); + goStop.classList.remove("disabled"); + goReset.classList.remove("disabled"); +}); +goStop.addEventListener("click", function () { + pauseStopwatch(); + goSplit.classList.add("disabled"); + goStop.classList.add("disabled"); +}); +goReset.addEventListener("click", function () { + resetStopwatch(); + goStart.classList.remove("disabled"); + goSplit.classList.add("disabled"); + goStop.classList.add("disabled"); + goReset.classList.add("disabled"); +}); +goSplit.addEventListener("click", function () { + splitStopwatch(); +}); diff --git a/styles.css b/styles.css index 04e7110..ee5e286 100644 --- a/styles.css +++ b/styles.css @@ -1,3 +1,42 @@ +html { + min-height: 100vh; + cursor: url(https://cur.cursors-4u.net/holidays/hol-1/hol80.ani), + url(https://cur.cursors-4u.net/holidays/hol-1/hol80.png), auto !important; +} + body { - background-color: pink; + font-family: "Quantico", sans-serif; + margin: 0; + text-align: center; + background: radial-gradient(#ffb6c1, #ffffff); +} + +.elapsed { + font-size: 250%; +} + +.image-container { + margin: 40px; + display: inline-block; +} + +.img { + max-width: 50px; + margin: 30px; +} + +.disabled { + opacity: 35%; +} + +.split { + max-width: 65px; + margin: 25px; +} + +.split-container { + margin: 40px; + font-size: 150%; + font-style: italic; + font-weight: thin; } From c7f68990da9f5944fa9a393781a63f5020e80676 Mon Sep 17 00:00:00 2001 From: Ameliawibi <77047210+ameliawibi@users.noreply.github.com> Date: Thu, 25 Nov 2021 22:41:27 +0800 Subject: [PATCH 5/7] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 65af6f7..41cde86 100644 --- a/README.md +++ b/README.md @@ -1 +1,3 @@ # Rocket Academy Coding Bootcamp: Timer + +Published via Netlify: https://stopwatch-a.netlify.app/ From 8648fda150f974e3a8f103876c7558cb52fc3cde Mon Sep 17 00:00:00 2001 From: Amelia Wibisono Date: Thu, 25 Nov 2021 22:44:40 +0800 Subject: [PATCH 6/7] fix margin --- styles.css | 2 -- 1 file changed, 2 deletions(-) diff --git a/styles.css b/styles.css index ee5e286..002f772 100644 --- a/styles.css +++ b/styles.css @@ -16,7 +16,6 @@ body { } .image-container { - margin: 40px; display: inline-block; } @@ -35,7 +34,6 @@ body { } .split-container { - margin: 40px; font-size: 150%; font-style: italic; font-weight: thin; From 88208445988aea0a1db657d8a894206789ecf261 Mon Sep 17 00:00:00 2001 From: Amelia Wibisono Date: Fri, 26 Nov 2021 00:54:46 +0800 Subject: [PATCH 7/7] edit pad --- index.html | 4 ++-- script.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index 310c5d5..8f5da96 100644 --- a/index.html +++ b/index.html @@ -1,7 +1,7 @@ - Timer + ⏱ Stopwatch @@ -13,7 +13,7 @@ -

Stopwatch!

+

⏱ Stopwatch!

diff --git a/script.js b/script.js index 8e2550c..2b4e68d 100644 --- a/script.js +++ b/script.js @@ -12,7 +12,7 @@ let elapsedSplitTime = 0; //build stopwatch elapsed time const stopWatch = document.createElement("div"); stopWatch.classList.add("elapsed"); -stopWatch.innerHTML = `00 : 00 : 00 : 0000`; +stopWatch.innerHTML = `00 : 00 : 00 : 000`; document.body.appendChild(stopWatch); // build interactive buttons @@ -61,7 +61,7 @@ const renderTime = (element, elapsed) => { text += hours.toString().padStart(2, "0") + " : "; text += minutes.toString().padStart(2, "0") + " : "; text += seconds.toString().padStart(2, "0") + " : "; - text += milliseconds.toString().padStart(4, "0"); + text += milliseconds.toString().padStart(3, "0"); element.innerHTML = text; return element.innerHTML; };