Pomodoro Timer - Code Explanation

HTML STRUCTURE

<div class="timer-display">
    <div class="timer-value" id="timerDisplay">25:00</div>
    <div class="timer-label" id="timerLabel">Work Session</div>
</div>

<div class="controls">
    <button onclick="startTimer()">Start</button>
    <button onclick="pauseTimer()">Pause</button>
    <button onclick="resetTimer()">Reset</button>
</div>

<div class="settings">
    <input type="number" id="workDuration" value="25" min="1" max="60">
    <input type="number" id="breakDuration" value="5" min="1" max="30">
    <button onclick="updateSettings()">Update Settings</button>
</div>

JAVASCRIPT CODE

let isWorkSession = true;
let timeLeft = 25 * 60;
let workDuration = 25;
let breakDuration = 5;
let isRunning = false;
let sessions = [];
let timerInterval;

function updateDisplay() {
    const minutes = Math.floor(timeLeft / 60);
    const seconds = timeLeft % 60;
    document.getElementById('timerDisplay').textContent = 
        (minutes < 10 ? '0' : '') + minutes + ':' + (seconds < 10 ? '0' : '') + seconds;
    document.getElementById('timerLabel').textContent = isWorkSession ? 'Work Session' : 'Break Time';
}

function startTimer() {
    if (isRunning) return;
    isRunning = true;
    
    timerInterval = setInterval(() => {
        timeLeft--;
        updateDisplay();
        
        if (timeLeft === 0) {
            sessions.push(new Date().toLocaleTimeString().slice(0, 5));
            displaySessions();
            isWorkSession = !isWorkSession;
            timeLeft = isWorkSession ? workDuration * 60 : breakDuration * 60;
            updateDisplay();
        }
    }, 1000);
}

function pauseTimer() {
    isRunning = false;
    clearInterval(timerInterval);
}

function resetTimer() {
    isRunning = false;
    clearInterval(timerInterval);
    isWorkSession = true;
    timeLeft = workDuration * 60;
    updateDisplay();
}

KEY FEATURES

✓ Work & Break Session Toggle
✓ Start/Pause/Reset Controls
✓ Adjustable Duration Settings
✓ Session History Tracking
✓ Real-time Display Update
✓ Automatic Session Switching
✓ Time Display Formatting (MM:SS)

LEARNING CONCEPTS

• setInterval() for Timer Loop
• clearInterval() for Stopping Timer
• Math.floor() for Conversion
• Template String Formatting
• Boolean Toggle Logic
• Time Calculations (seconds to minutes)
• Array for Session Storage
• localStorage Integration (Optional)
← Back to Project