Pomodoro Clock
How do I make an pomodoro clock?
Objective: Build a CodePen.io app that is functionally similar to this: http://codepen.io/FreeCodeCamp/full/VemPZX.. What is a pomodoro clock? How do you make a pomodoro clock? This script and codes were developed by Sam Koshy on 06 November 2022, Sunday.
Pomodoro Clock - Script Codes HTML Codes
<!DOCTYPE html>
<html >
<head> <meta charset="UTF-8"> <title>Pomodoro Clock</title> <link rel='stylesheet prefetch' href='https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.4.0/css/font-awesome.min.css'> <link rel="stylesheet" href="css/style.css">
</head>
<body> <link href='https://fonts.googleapis.com/css?family=Oswald:400' rel='stylesheet' type='text/css'>
<div class="topBar"> <div class="topSlice1"></div>
</div>
<div class="topSlice2"></div> <!--added since spacing of title was different in chrome and firefox browsers-->
<div class="topSlice3"></div> <!--added since spacing of title was different in chrome and firefox browsers-->
<div class="topRight"></div>
<div class="title"> <h1 style="font-family: 'Oswald', sans-serif;">Pomodoro Timer</h1>
</div>
<br>
<br>
<br>
<div> <div class="Rtop1"></div> <div class="Rtop2"></div>
</div>
<div style="font-family: 'Oswald', sans-serif;"> <div class="R1"> <p>LCARS 23744</p> </div> <div class="R2"> <p>01-23847</p> </div> <div class="R3"></div> <div class="R4"></div> <div class="R5"></div> <div class="R6"></div> <div class="R7"></div> <div class="R8"></div>
</div>
<div style="font-family: 'Oswald', sans-serif"> <div class="B1"> <p>06-84920</p> </div> <div class="B2"> <p>05-25374</p> </div> <div class="B3"> <p>04-16493</p> </div> <div class="B4"> <p>03-26749</p> </div> <div class="B5"> <p>02-32437</p> </div> <div class="B6"></div> <div class="B7"></div> <div class="B8"></div> <div class="B9"></div> <div class="B10"></div> <div class="B11"></div> <div class="B12"></div> <div class="B13"></div> <div class="B14"></div>
</div>
<div class="clock" style="font-family: 'Oswald', sans-serif;"> <span class="progressBar"></span> <h2 id="clockTitle">Session</h2> <h1 id="runTime">25:00</h1> <p><i class="fa fa-refresh fa-3x"></i></p>
</div>
<div class="session" style="font-family: 'Oswald', sans-serif;"> <h1>Session<br> Length</h1> <div class="sessionPillplus"> <p><i class="fa fa-plus-square fa-2x session-plus"></i></div> <span id="sessionFont">25</span> <br> <div class="sessionPillminus"> <i class="fa fa-minus-square fa-2x session-minus"></i> </div> </p>
</div>
<div class="break" style="font-family: 'Oswald', sans-serif;"> <h1>Break <br> Length</h1> <div class="breakPillplus"> <p><i class="fa fa-plus-square fa-2x break-plus"></i> </div> <span id="breakFont"> 5</span> <div class="breakPillminus"> <i class="fa fa-minus-square fa-2x break-minus"></i></div> </p>
</div> <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0-alpha1/jquery.min.js'></script> <script src="js/index.js"></script>
</body>
</html>
Pomodoro Clock - Script Codes CSS Codes
body { background: rgb(0, 0, 0); height: 100%;
}
.topBar { position: absolute; width: 593px; height: 58px; background-color: rgb(255, 174, 0); border-radius: 500px 0 0 500px; //z-index: -1; margin-top: 32px; margin-left: 250px;
}
.topSlice1 { position: relative; width: 13px; height: 58px; margin-left: 93px; background-color: rgb(0, 0, 0);
}
.topSlice2 { position: absolute; width: 2px; height: 58px; margin-left: 1270px; background-color: rgba(255, 174, 0, 0.4); margin-top: 32px;
}
.topSlice3 { position: absolute; width: 2px; height: 58px; margin-left: 1275px; background-color: rgba(255, 174, 0, 0.6); margin-top: 32px;
}
.topRight { position: absolute; width: 93px; height: 58px; margin-left: 1280px; margin-top: 32px; background-color: rgb(255, 174, 0); border-radius: 0 500px 500px 0;
}
.title { position: absolute; color: rgb(147, 222, 245); font-size: 200%; margin-left: 850px; margin-right: -502px; margin-top: -30px;
}
.Rtop1 { position: absolute; z-index: 1; width: 30px; height: 30px; background-color: rgb(0, 0, 0); margin-top: 48px; border-radius: 0 0 0 45%; margin-left: 120px;
}
.Rtop2 { position: absolute; z-index: 1; width: 373px; height: 19px; background-color: rgb(0, 0, 0); margin-top: 59px; margin-left: 138px;
}
.R1 { position: absolute; width: 120px; height: 70px; background-color: rgb(194, 76, 76); margin-top: -55px;
}
.R1 p { position: relative; margin-top: 45px; float: right; margin-right: 3px;
}
.R2 { position: absolute; width: 120px; height: 78px; background-color: rgb(153, 153, 255); margin-top: 20px; border-radius: 0 0 0 60%;
}
.R2 p { position: relative; margin-top: 3px; float: right; margin-right: 3px;
}
.R3 { position: absolute; width: 400px; height: 30px; background-color: rgb(153, 153, 255); margin-top: 68px; margin-left: 90px; //border-radius:40% 0 0 0;
}
.R4 { position: absolute; width: 20px; height: 20px; background-color: rgb(87, 121, 158); margin-top: 78px; margin-left: 494px;
}
.R5 { position: absolute; width: 125px; height: 20px; background-color: rgb(180, 143, 189); margin-top: 78px; margin-left: 518px;
}
.R6 { position: absolute; width: 330px; height: 20px; background-color: rgb(180, 143, 189); margin-top: 78px; margin-left: 647px;
}
.R7 { position: absolute; width: 210px; height: 20px; background-color: rgb(153, 164, 247); margin-top: 78px; margin-left: 981px;
}
.R8 { position: absolute; width: 232px; height: 20px; background-color: rgb(240, 189, 143); margin-top: 78px; margin-left: 1195px;
}
.B1 { position: absolute; width: 120px; height: 160px; background-color: rgb(153, 164, 247); margin-top: 700px;
}
.B1 p { position: relative; margin-top: 5px; float: right; margin-right: 3px;
}
.B2 { position: absolute; width: 120px; height: 40px; background-color: rgb(250, 250, 250); margin-top: 655px;
}
.B2 p { position: relative; margin-top: 10px; float: right; margin-right: 3px;
}
.B3 { position: absolute; width: 120px; height: 190px; background-color: rgb(240, 189, 143); margin-top: 460px;
}
.B3 p { position: relative; margin-top: 165px; float: right; margin-right: 3px;
}
.B4 { position: absolute; width: 120px; height: 203px; background-color: rgb(180, 143, 189); margin-top: 252px;
}
.B4 p { position: relative; margin-top: 178px; float: right; margin-right: 3px;
}
.B5 { position: absolute; width: 120px; height: 138px; background-color: rgb(209, 107, 107); margin-top: 110px; border-radius: 70% 0 0 0;
}
.B5 p { position: relative; margin-top: 113px; float: right; margin-right: 3px;
}
.B6 { position: absolute; width: 191px; height: 35px; background-color: rgb(209, 107, 107); margin-top: 110px; margin-left: 99px;
}
.B7 { position: absolute; width: 30px; height: 30px; background-color: rgb(0, 0, 0); margin-top: 130px; margin-left: 120px; border-radius: 70% 0 0 0;
}
.B8 { position: absolute; width: 180px; height: 16px; background-color: rgb(0, 0, 0); margin-top: 130px; margin-left: 139px;
}
.B9 { position: absolute; width: 200px; height: 20px; background-color: rgb(209, 107, 107); margin-top: 110px; margin-left: 289px;
}
.B10 { position: absolute; width: 20px; height: 20px; background-color: rgb(87, 121, 158); margin-top: 110px; margin-left: 494px;
}
.B11 { position: absolute; width: 124px; height: 14px; background-color: rgb(240, 189, 143); margin-top: 110px; margin-left: 518px;
}
.B12 { position: absolute; width: 330px; height: 20px; background-color: rgb(180, 143, 189); margin-top: 110px; margin-left: 647px;
}
.B13 { position: absolute; width: 210px; height: 20px; background-color: rgb(255, 174, 0); margin-top: 110px; margin-left: 981px;
}
.B14 { position: absolute; width: 232px; height: 20px; background-color: rgb(209, 107, 107); margin-top: 110px; margin-left: 1195px;
}
.clock { position: relative; width: 390px; height: 390px; border-radius: 50%; text-align: center; background: rgb(87, 121, 158); border: 40px solid; //border-color:rgb(255,141,13); border-color: rgb(240, 218, 129); box-shadow: 0 0 0 3px rgb(255, 255, 255); margin: 220px 340px; z-index: 1; overflow: hidden;
}
.clock h2 { position: relative; font-size: 250%; /*text-align: center; //line-height: 0; //margin-top:-250px;*/
}
.clock h1 { font-size: 920%; text-align: center; line-height: 28px;
}
.fa-refresh { position: relative; text-align: center;
}
.clock:hover { cursor: pointer;
}
.clock .progressBar { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: rgb(180, 143, 189); z-index: -1; transform: scaleY(0.00001); transform-origin: 50% 100%; /*margin:0 auto; margin-top:150px;*/
}
.session { position: absolute; color: rgb(214, 214, 214); margin-top: -790px; margin-left: 1010px;
}
.session h1 { text-align: center; margin-left: -150px; margin-bottom: -5px;
}
#sessionFont { width:42px; display:inline-block; text-align:center; font-size: 250%;
}
.sessionPillplus { width: 120px; height: 50px; background-color: rgb(255, 174, 0); border-radius: 500px; margin-left: -40px;
}
.session-plus { position: absolute; text-align: center; margin: 9px auto; margin-left: 47px; color: rgb(0, 0, 0);
}
.sessionPillminus { width: 120px; height: 50px; background-color: rgb(191, 78, 78); border-radius: 500px; margin-right: 100px; margin-left: -40px;
}
.session-minus { position: absolute; text-align: center; margin: 9px auto; margin-left: 47px; color: rgb(0, 0, 0);
}
.session-plus:hover { cursor: pointer;
}
.session-minus:hover { cursor: pointer;
}
.break { position: absolute; color: rgb(214, 214, 214); margin-top: -790px; margin-left: 1100px; //margin-right:50px;
}
.break h1 { text-align: center; margin-left: -5px; margin-bottom: -5px;
}
#breakFont { width:100%; display:inline-block; text-align:center; font-size: 250%;
}
.breakPillplus { width: 120px; height: 50px; background-color: rgb(166, 158, 247); //(153,164,247); border-radius: 500px;
}
.break-plus { position: absolute; text-align: center; margin: 9px auto; margin-left: 47px; color: rgb(0, 0, 0);
}
.breakPillminus { width: 120px; height: 50px; background-color: rgb(255, 174, 0); border-radius: 500px;
}
.break-minus { position: absolute; text-align: center; margin: 9px auto; margin-left: 47px; color: rgb(0, 0, 0);
}
.break-plus:hover { cursor: pointer;
}
.break-minus:hover { cursor: pointer;
}
/*Following is used to prevent blue highlight when user selects divs*/
*,
*:before,
*:after { -webkit-user-select: none; /* Chrome/Safari */ -moz-user-select: none; /* Firefox */ -ms-user-select: none; /* IE10+ */ -webkit-tap-highlight-color: rgba(255, 255, 255, 0); /*chrome on android*/
}
Pomodoro Clock - Script Codes JS Codes
var mins = 25, secs = 0, TimeoutID = null, start, interval, delta, resetMins = mins, breakMins = 5, sessionLength = mins, scaleVal = 0.00001;
var snd1 = new Audio("http://www.trekcore.com/audio/toscomputer/tos_com_beep_3.mp3");
var snd2 = new Audio("http://www.trekcore.com/audio/toscomputer/tos_intercom_whistle.mp3");
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
function updateClock() { if (secs >= 10 && mins >= 0) { scaleVal = ((resetMins * 60) - (mins * 60 + secs)) / (resetMins * 60); scaleString = "scaleY(" + scaleVal + ")"; $(".progressBar").css("transform", scaleString); //update fill by changing css delta = Date.now() - start; //accounts for the extra time it takes to run setTimeout .... also Date.now() is only accurate to milliseconds if (delta > 1000 && delta <= 2000) { interval = 2000 - delta; //since function takes a few millisecs to run, we subtract that from our interval } else if (delta > 2000) { if ((secs - Math.round(delta / 1000)) > 0) { //update secs if delta is large but check if update still leaves secs a positive number secs -= Math.round(delta / 1000); interval = 0; } else { if (mins > 0) { //so that we do not have the clock drifting to -1 mins mins -= 1; secs = 60 + (secs - Math.round(delta / 1000)); //if delta is large update the next mins and secs } interval = 0; } } else { interval = 1000; } if (secs >= 10) { document.getElementById("runTime").textContent = mins + ':' + secs; } else if (secs === 60) { document.getElementById("runTime").textContent = mins + ':00'; } else { document.getElementById("runTime").textContent = mins + ':0' + secs; } TimeoutID = setTimeout(updateClock, interval); //behavior of SetTimeout is more preditable than setInterval secs -= 1; start = Date.now(); /**************************************************************************/ } else if (secs < 10 && secs > 0 && mins >= 0) { scaleVal = ((resetMins * 60) - (mins * 60 + secs)) / (resetMins * 60); scaleString = "scaleY(" + scaleVal + ")"; $(".progressBar").css("transform", scaleString); //update fill delta = Date.now() - start; if (delta > 1000 && delta <= 2000) { interval = 2000 - delta; } else if (delta > 2000) { if ((secs - Math.round(delta / 1000)) > 0) { secs -= Math.round(delta / 1000); interval = 0; } else { if (mins > 0) { mins -= 1; secs = 60 + (secs - Math.round(delta / 1000)); } interval = 0; } } else { interval = 1000; } if (secs >= 10 && secs < 60) { document.getElementById("runTime").textContent = mins + ':' + secs; } else if (secs === 60) { document.getElementById("runTime").textContent = mins + ':00'; } else { document.getElementById("runTime").textContent = mins + ':0' + secs; } TimeoutID = setTimeout(updateClock, interval); secs -= 1; start = Date.now(); /**************************************************************************/ } else if (secs === 0 && mins > 0) { scaleVal = ((resetMins * 60) - (mins * 60 + secs)) / (resetMins * 60); scaleString = "scaleY(" + scaleVal + ")"; $(".progressBar").css("transform", scaleString); //update fill document.getElementById("runTime").textContent = mins + ':0' + secs; mins -= 1; delta = Date.now() - start; if (delta > 1000 && delta <= 2000) { interval = 2000 - delta; //since function takes a few millisecs to run, we subtract that from our interval secs = 59; } else if (delta > 2000) { secs = 60 - Math.abs(secs - Math.round(delta / 1000)); interval = 0; } else { interval = 1000; secs = 59; } TimeoutID = setTimeout(updateClock, interval); start = Date.now(); } else if (secs === 0 && mins === 0) { switch (document.getElementById("clockTitle").textContent) { case ("Session"): snd1.play(); //play sound at end of session //setTimeout(function(){snd.pause();},3000);//stop sound after 3 seconds break; case ("Break Time!"): snd2.play(); break; } scaleVal = ((resetMins * 60) - (mins * 60 + secs)) / (resetMins * 60); scaleString = "scaleY(" + scaleVal + ")"; $(".progressBar").css("transform", scaleString); //update fill document.getElementById("runTime").textContent = mins + ':0' + secs; if (document.getElementById("clockTitle").textContent == "Session") { setTimeout(function() { document.getElementById("clockTitle").textContent = "Break Time!" }, 1000); start = Date.now(); mins = breakMins; resetMins = breakMins; setTimeout(function() { $(".progressBar").css("background", "rgb(176,189,143)"); }, 1000); setTimeout(updateClock, 1000); } else { snd2.play(); //play sound at end of break setTimeout(function() { document.getElementById("clockTitle").textContent = "Session" }, 1000); start = Date.now(); mins = sessionLength; resetMins = sessionLength; setTimeout(function() { $(".progressBar").css("background", "rgb(180,143,189)"); }, 1000); setTimeout(updateClock, 1000); } } } /**************************************************************************/ /**************************************************************************/ /**************************************************************************/
$(document).ready(function() { $(".clock").click(function() { start = Date.now(); if (TimeoutID === null) { //document.getElementById("runTime").textContent = mins + ':' + secs; //starts on click without one second delay updateClock(); } else { clearTimeout(TimeoutID); //used to pause the setTimeout TimeoutID = null; //resets the interval to satisfy 'if' statement } }); $(".fa-refresh").click(function() { //reset clock start = Date.now(); mins = resetMins; secs = 0; updateClock(); }); $(".session-plus").click(function() { //reset clock mins += 1; secs = 0; resetMins = mins; sessionLength = mins; document.getElementById("runTime").textContent = mins + ':00'; document.getElementById("sessionFont").textContent = mins; }); $(".session-minus").click(function() { //reset clock if (mins > 0) { //safeguard against negative mins mins -= 1; secs = 0; resetMins = mins; sessionLength = mins; document.getElementById("runTime").textContent = mins + ':00'; document.getElementById("sessionFont").textContent = mins; } }); $(".break-plus").click(function() { //reset clock breakMins += 1; document.getElementById("breakFont").textContent = breakMins; }); $(".break-minus").click(function() { //reset clock if (breakMins > 0) { //safeguard against negative mins breakMins -= 1; document.getElementById("breakFont").textContent = breakMins; } });
});
Developer | Sam Koshy |
Username | codinger |
Uploaded | November 06, 2022 |
Rating | 3 |
Size | 5,358 Kb |
Views | 10,120 |
Find the perfect freelance services for your business! Fiverr's mission is to change how the world works together. Fiverr connects businesses with freelancers offering digital services in 500+ categories. Find Developer!
Name | Size |
Tic Tac Toe _ Alternate | 5,275 Kb |
Tic Tac Toe | 5,797 Kb |
Local Weather App | 5,141 Kb |
Data Visualization - US GDP | 3,131 Kb |
Simon | 4,744 Kb |
Personal Portfolio Webpage | 8,383 Kb |
Random Quote Machine | 4,626 Kb |
A Pen by Sam Koshy | 7,861 Kb |
Twitchtv Status | 4,663 Kb |
Javascript Calculator | 4,576 Kb |
Jasper is the AI Content Generator that helps you and your team break through creative blocks to create amazing, original content 10X faster. Discover all the ways the Jasper AI Content Platform can help streamline your creative workflows. Start For Free!
Name | Username | Size |
IbrahimJabbari-Effect14 | Ibrahimjabbari | 1,919 Kb |
Resume | Rottingroom | 5,483 Kb |
Haml Calendar | Katydecorah | 5,643 Kb |
Eunice A | Ejbronze | 2,203 Kb |
Update CSS Variables with JS | Wesbos | 2,335 Kb |
Parallax with only CSS | Thulioph | 2,297 Kb |
Background Images | Jooonebug | 2,100 Kb |
Horizontal Navigation with Floats | Gymratpacks | 5,403 Kb |
After America | Jonathangarner | 2,686 Kb |
Mapbox Directions with geolocation tracking | Pollardld | 5,827 Kb |
Surf anonymously, prevent hackers from acquiring your IP address, send anonymous email, and encrypt your Internet connection. High speed, ultra secure, and easy to use. Instant setup. Hide Your IP Now!