Open In App

Create a Pomodoro Timer using HTML CSS and JavaScript

In this article, we will see how to design Pomodoro Timer with the help of HTML CSS, and JavaScript. The Pomodoro Technique is a time management method that involves breaking your work into focused intervals, typically 25 minutes, followed by short breaks. After completing four cycles, take a longer break. This technique aims to enhance productivity by maintaining concentration during work intervals and providing regular breaks for renewal.

Approach

Example: In this example, we will create a Pomodoro timer with the help of HTML CSS, and JavaScript.




<!DOCTYPE html>
<html lang="en">
  
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, 
                   initial-scale=1.0">
    <title>Pomodoro Timer</title>
    <link rel="stylesheet" 
          href="style.css">
    <script src=
            crossorigin='anonymous'>
      </script>
</head>
  
<body>
    <h1 style="color:green">
          GeeksforGeeks
      </h1>
    <div class="main">
        <div class="timer-circle" 
             id="timer">15:00
          </div>
        <div class="control-buttons">
            <button onclick="togglePauseResume()">
                  Pause
              </button>
            <button onclick="restartTimer()">
                  Restart
              </button>
            <button onclick="chooseTime()">
                  Choose Time
              </button>
        </div>
    </div>
    <script src="script.js"></script>
</body>
  
</html>




/* style.css*/
body {
    display: flex;
    align-items: center;
    justify-content: center;
    font-family: sans-serif;
    line-height: 1.5;
    min-height: 100vh;
    background: #f3f3f3;
    flex-direction: column;
    margin: 0;
}
  
.main {
    background-color: #fff;
    border-radius: 15px;
    box-shadow: 0 0 20px rgba(0, 0, 0, 0.2);
    padding: 10px 20px;
    transition: transform 0.2s;
    width: 500px;
    height: 400px;
    text-align: center;
}
  
.timer-circle {
    border-radius: 50%;
    width: 200px;
    height: 200px;
    margin: 20px auto;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 25px;
    color: crimson;
    border: 8px solid #3498db;
}
  
.control-buttons {
    margin-top: 75px;
    display: flex;
    justify-content: space-evenly;
}
  
.control-buttons button {
    background-color: #3498db;
    color: #fff;
    border: none;
    padding: 10px 20px;
    border-radius: 5px;
    cursor: pointer;
}
  
.control-buttons button:hover {
    background-color: #266094;
    transition: background-color 0.3s;
}




// script.js
let timer;
let minutes = 15;
let seconds = 0;
let isPaused = false;
let enteredTime = null;
  
function startTimer() {
    timer = setInterval(updateTimer, 1000);
}
  
function updateTimer() {
    const timerElement =
        document.getElementById('timer');
    timerElement.textContent = 
        formatTime(minutes, seconds);
  
    if (minutes === 0 && seconds === 0) {
        clearInterval(timer);
        alert('Time is up! Take a break.');
    } else if (!isPaused) {
        if (seconds > 0) {
            seconds--;
        } else {
            seconds = 59;
            minutes--;
        }
    }
}
  
function formatTime(minutes, seconds) {
    return 
    `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`;
}
  
function togglePauseResume() {
    const pauseResumeButton =
        document.querySelector('.control-buttons button');
    isPaused = !isPaused;
  
    if (isPaused) {
        clearInterval(timer);
        pauseResumeButton.textContent = 'Resume';
    } else {
        startTimer();
        pauseResumeButton.textContent = 'Pause';
    }
}
  
function restartTimer() {
    clearInterval(timer);
    minutes = enteredTime || 15;
    seconds = 0;
    isPaused = false;
    const timerElement =
        document.getElementById('timer');
    timerElement.textContent =
        formatTime(minutes, seconds);
    const pauseResumeButton =
        document.querySelector('.control-buttons button');
    pauseResumeButton.textContent = 'Pause';
    startTimer();
}
  
function chooseTime() {
    const newTime = prompt('Enter new time in minutes:');
    if (!isNaN(newTime) && newTime > 0) {
        enteredTime = parseInt(newTime);
        minutes = enteredTime;
        seconds = 0;
        isPaused = false;
        const timerElement =
            document.getElementById('timer');
        timerElement.textContent =
            formatTime(minutes, seconds);
        clearInterval(timer);
        const pauseResumeButton =
            document.querySelector('.control-buttons button');
        pauseResumeButton.textContent = 'Pause';
        startTimer();
    } else {
        alert('Invalid input. Please enter'+
              ' a valid number greater than 0.');
    }
}
  
startTimer();

Output:

 


Article Tags :