Pomodoro Timer
How do I make an pomodoro timer?
Created a simple pomodoro timer with customizable session and break lengths for FreeCodeCamp.com zipline.. What is a pomodoro timer? How do you make a pomodoro timer? This script and codes were developed by Zoite on 28 November 2022, Monday.
Pomodoro Timer - Script Codes HTML Codes
<!DOCTYPE html>
<html >
<head> <meta charset="UTF-8"> <title>Pomodoro Timer</title> <link rel="stylesheet" href="css/style.css">
</head>
<body>
<h1>FreeCodeCamp</h1>
<main ng-app="PomodoroApp" ng-controller="MainCtrl"> <header> <div class="session"> <div class="breakCtrl"> <p>break length</p> <button class="minus" ng-click="breakLengthChange(-1)">-</button><span class="time">{{breakLength}}</span> <button class="plus" ng-click="breakLengthChange(1)">+</button> </div> <div class="sessionCtrl"> <p>session length</p> <button class="minus" ng-click="sessionLengthChange(-1)">-</button><span class="time">{{sessionLength}}</span> <button class="plus" ng-click="sessionLengthChange(1)">+</button> </div> </div> </header> <section ng-click="toggleTimer()"> <div class="timer"> <p class="title">{{sessionName}}</p> <p>{{timeLeft}}</p><span class="fill" ng-style="{'height':fillHeight, 'background':fillColor }"></span> </div> </section>
</main> <script src='http://ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular.min.js'></script> <script src="js/index.js"></script>
</body>
</html>
Pomodoro Timer - Script Codes CSS Codes
@import url(https://fonts.googleapis.com/css?family=Pacifico|Open+Sans:300);
* { margin: 0; font-family: Open Sans, Arial;
}
html, body, main { height: 100%; overflow: hidden; background-color: #333333;
}
h1 { display: block; background-color: #333333; margin: 0 auto; color: white; text-align: center; font-family: 'Pacifico'; font-size: 5em;
}
header { display: flex; justify-content: center; text-align: center; margin: 0 auto; color: #fff; text-transform: uppercase; padding: 20px;
}
header .session { font-size: .8em; display: flex;
}
header .session .breakCtrl, header .session .sessionCtrl { display: inline; padding-left: 30px; padding-right: 30px;
}
header .session .minus, header .session .plus { background-color: #333333; color: #fff; border: none; cursor: pointer; font-size: 2em; outline: none;
}
header .session .time { font-size: 2.5em; padding-left: 10px; padding-right: 10px;
}
section { background-color: #333333; height: 100%; color: #fff;
}
section .title { text-align: center; line-height: 180px; font-size: .8em;
}
section .timer { margin: 0 auto; text-align: center; width: 300px; height: 300px; font-size: 4em; border: 2px solid #99CC00; border-radius: 50%; cursor: pointer; position: relative; z-index: 20; overflow: hidden;
}
section .timer:before { content: ''; position: absolute; top: 0; bottom: 0; left: 0; right: 0; border-radius: 50%; z-index: 2; border: 4px solid #333333;
}
section .fill { content: ''; position: absolute; background: #99CC00; bottom: 0; right: 0; left: 0; z-index: -1;
}
Pomodoro Timer - Script Codes JS Codes
var app = angular.module('PomodoroApp', []);
app.controller('MainCtrl', function($scope, $interval) { $scope.breakLength = 5; $scope.sessionLength = 25; $scope.timeLeft = $scope.sessionLength; $scope.fillHeight = '0%'; $scope.sessionName = 'Session'; $scope.currentTotal; var runTimer = false; var secs = 60 * $scope.timeLeft; $scope.originalTime = $scope.sessionLength; function secondsToHms(d) { d = Number(d); var h = Math.floor(d / 3600); var m = Math.floor(d % 3600 / 60); var s = Math.floor(d % 3600 % 60); return ( (h > 0 ? h + ":" + (m < 10 ? "0" : "") : "") + m + ":" + (s < 10 ? "0" : "") + s ); } // Change default session length $scope.sessionLengthChange = function(time) { if (!runTimer){ if ($scope.sessionName === 'Session') { $scope.sessionLength += time; if ($scope.sessionLength < 1) { $scope.sessionLength = 1; } $scope.timeLeft = $scope.sessionLength; $scope.originalTime = $scope.sessionLength; secs = 60 * $scope.sessionLength; } } } // Change default break length $scope.breakLengthChange = function(time) { if (!runTimer){ $scope.breakLength += time; if ($scope.breakLength < 1) { $scope.breakLength = 1; } if ($scope.sessionName === 'Break!') { $scope.timeLeft = $scope.breakLength; $scope.originalTime = $scope.breakLength; secs = 60 * $scope.breakLength; } } } $scope.toggleTimer = function() { if (!runTimer) { if ($scope.currentName === 'Sesson') { $scope.currentLength = $scope.sessionLength; } else { $scope.currentLength = $scope.breakLength; } updateTimer(); runTimer = $interval(updateTimer, 1000); } else { $interval.cancel(runTimer); runTimer = false; } } function updateTimer() { secs -= 1; if (secs < 0) { // countdown is finished // Play audio var wav = 'http://www.oringz.com/oringz-uploads/sounds-917-communication-channel.mp3'; var audio = new Audio(wav); audio.play(); // toggle break and session $scope.fillColor = '#333333'; if ($scope.sessionName === 'Break!') { $scope.sessionName = 'Session'; $scope.currentLength = $scope.sessionLength; $scope.timeLeft = 60 * $scope.sessionLength; $scope.originalTime = $scope.sessionLength; secs = 60 * $scope.sessionLength; } else { $scope.sessionName = 'Break!'; $scope.currentLength = $scope.breakLength; $scope.timeLeft = 60 * $scope.breakLength; $scope.originalTime = $scope.breakLength; secs = 60 * $scope.breakLength; } } else { if ($scope.sessionName === 'Break!') { $scope.fillColor = '#FF4444'; } else { $scope.fillColor = '#99CC00'; } $scope.timeLeft = secondsToHms(secs); var denom = 60 * $scope.originalTime; var perc = Math.abs((secs / denom) * 100 - 100); $scope.fillHeight = perc + '%'; } }
});
Developer | Zoite |
Username | zoite |
Uploaded | November 28, 2022 |
Rating | 4.5 |
Size | 4,476 Kb |
Views | 12,144 |
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 |
Circle loader | 2,788 Kb |
FreeCodeCamp News | 4,039 Kb |
Step Bar | 3,875 Kb |
Random Quote Generator | 4,058 Kb |
Leaderboard | 5,165 Kb |
File Dropper | 5,985 Kb |
Rainbow Bordered Button | 2,655 Kb |
Twitter Card | 2,410 Kb |
Weather App | 9,392 Kb |
Glitch Text | 2,718 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 |
Hard-Stop Gradients | Mackdoyle | 2,288 Kb |
Starfield using KineticJS | Asp | 3,512 Kb |
The Fantastic Mr Fox | MalZiiirA | 10,435 Kb |
Twitch Live Channels | Inkblotty | 4,956 Kb |
Personal Website Redesign v2.0 | DevItWithDavid | 5,168 Kb |
Glitchy Text Effect | Kescoe | 2,208 Kb |
Test | Dviate | 2,668 Kb |
3D flipping card | Ssaakkaa | 2,238 Kb |
Button fills | Zubfatal | 5,205 Kb |
IE11 Test | Boostnewmedia | 4,998 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!