EN ES
Home > Web development > Javascript Tutorials > How to Make a "Pomodoro" Timer with JavaScript

How to Make a "Pomodoro" Timer with JavaScript

Diego Cortés
Diego Cortés
September 30, 2024
How to Make a "Pomodoro" Timer with JavaScript

The Pomodoro method is a time management technique popularized by Francesco Cirillo in the 1980s. This technique uses a timer to break work into intervals of 25 minutes, separated by short breaks. In this article, we will teach you how to create a "Pomodoro" timer using JavaScript. This project will not only help you improve your programming skills but can also help you manage your time better.

What is the Pomodoro Method?

The Pomodoro method is based on focused work periods of 25 minutes, followed by a 5-minute break. After completing four "Pomodoros," it is recommended to take a longer break of 15 to 30 minutes. This technique has proven effective for increasing productivity and enhancing focus on specific tasks.

Prerequisites

To follow this tutorial, you should have a basic understanding of:

  • HTML: Structure of web documents.
  • CSS: For design and presentation.
  • JavaScript: Logic and functionality of the timer.

HTML Structure

First, create an index.html file and ensure you include the basic HTML structure. Here’s a simple example:

<!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="styles.css">
</head>
<body>
    <div class="container">
        <h1>Pomodoro Timer</h1>
        <div id="timer">25:00</div>
        <button id="startButton">Start</button>
        <button id="stopButton">Stop</button>
        <button id="resetButton">Reset</button>
    </div>
    <script src="script.js"></script>
</body>
</html>

CSS Styles

Next, create a styles.css file to apply some basic styles to the timer. Here’s an example:

body {
    font-family: Arial, sans-serif;
    background-color: #f4f4f4;
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
    margin: 0;
}

.container {
    text-align: center;
    background: #fff;
    padding: 20px;
    border-radius: 8px;
    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
}

#timer {
    font-size: 48px;
    margin: 20px 0;
}

JavaScript Logic

Now, let’s add the functionality of the timer in a script.js file. This is the key component where you will handle the timer logic:

let timer; // To store the reference to the timer
let isRunning = false; // Timer state
let timeLeft = 25 * 60; // 25 minutes in seconds

function updateTimerDisplay() {
    const minutes = Math.floor(timeLeft / 60);
    const seconds = timeLeft % 60;
    document.getElementById('timer').textContent = `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`;
}

function startTimer() {
    if(!isRunning) {
        isRunning = true;
        timer = setInterval(() => {
            if (timeLeft > 0) {
                timeLeft--;
                updateTimerDisplay();
            } else {
                clearInterval(timer);
                alert("Time's up!");
                timeLeft = 25 * 60; // Reset to 25 minutes
                updateTimerDisplay();
                isRunning = false;
            }
        }, 1000);
    }
}

function stopTimer() {
    clearInterval(timer);
    isRunning = false;
}

function resetTimer() {
    clearInterval(timer);
    timeLeft = 25 * 60;
    updateTimerDisplay();
    isRunning = false;
}

// Assign events to buttons
document.getElementById('startButton').onclick = startTimer;
document.getElementById('stopButton').onclick = stopTimer;
document.getElementById('resetButton').onclick = resetTimer;

// Initialize the timer display on screen
updateTimerDisplay();

Improvements and Additional Features

Once you have implemented the basic Pomodoro timer, consider adding some additional features:

  • Alarm sound: You can implement a sound that plays when the time is up.
  • Custom settings: Allow the user to change the duration of intervals and breaks.
  • Log: Keep a record of completed intervals and breaks taken.

Conclusion

Creating a "Pomodoro" timer with JavaScript is an excellent project to practice your front-end skills. With the steps we've provided in this article, you now have the foundation of an efficient timer. Feel free to experiment and add your own features to customize it even more. Good luck and enjoy coding!

This article has been optimized for SEO using keywords related to the Pomodoro timer and JavaScript. If you share or publish it, be sure to use appropriate meta tags and internal links to improve visibility in search engines.

Diego Cortés
Diego Cortés
Full Stack Developer, SEO Specialist with Expertise in Laravel & Vue.js and 3D Generalist

Categories

Page loaded in 36.32 ms