Drum Pad

ycxv

by gustav75

HTML

<!DOCTYPE html>
<html lang="de">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Web Drums</title>
    <style>
        body {
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            height: 100vh;
            background-color: #333;
            color: white;
            font-family: Arial, sans-serif;
        }
        .drum-pad {
            display: grid;
            grid-template-columns: repeat(3, 100px);
            grid-gap: 20px;
            margin-top: 50px;
        }
        .pad {
            width: 100px;
            height: 100px;
            background-color: #555;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 24px;
            cursor: pointer;
            border-radius: 10px;
            user-select: none;
        }
        .pad:active {
            background-color: #777;
        }
    </style>
</head>
<body>
    <h1>Web Drums</h1>
    <div class="drum-pad">
        <div class="pad" data-sound="kick">Kick (1)</div>
        <div class="pad" data-sound="snare">Snare (2)</div>
        <div class="pad" data-sound="hihat">Hi-Hat (3)</div>
    </div>
    <script src="script.js"></script>
</body>
</html>

CSS

:root {
  --color-1: oklch(71.32% 2.55% 145.3);
  --color-2: oklch(79.11% 4.16% 140.65);
  --color-3: oklch(89.99% 3.58% 137.48);
  --color-4: oklch(97.5% 1.44% 64.35);
}

body {
  background: linear-gradient(90deg, var(--color-1) 0%, var(--color-1) 25%, var(--color-2) 25%, var(--color-2) 50%, var(--color-3) 50%, var(--color-3) 75%, var(--color-4) 75%, var(--color-4) 100%);
}

JavaScript

const sounds = {
    kick: new Audio('https://static.wixstatic.com/mp3/efdc4b_25353dc62f3b41e1bd71001b22b767a9.wav'),
    snare: new Audio('https://static.wixstatic.com/mp3/efdc4b_e79caa7bfe0a4b33a1acdb68badd9ae7.wav'),
    hihat: new Audio('https://static.wixstatic.com/mp3/efdc4b_f34e4b39a7b546ac9e1d75b4f07f17d7.wav')
};

document.querySelectorAll('.pad').forEach(pad => {
    pad.addEventListener('click', () => {
        const sound = pad.getAttribute('data-sound');
        sounds[sound].currentTime = 0; // Reset audio to start
        sounds[sound].play();
    });
});

document.addEventListener('keydown', (event) => {
    let sound;
    switch(event.key) {
        case '1':
            sound = 'kick';
            break;
        case '2':
            sound = 'snare';
            break;
        case '3':
            sound = 'hihat';
            break;
        default:
            return; // Exit if other key is pressed
    }
    
    sounds[sound].currentTime = 0; // Reset audio to start
    sounds[sound].play();

    // Optional: Add a visual feedback by triggering click event on the corresponding pad
    document.querySelector(`.pad[data-sound="${sound}"]`).classList.add('active');
    setTimeout(() => {
        document.querySelector(`.pad[data-sound="${sound}"]`).classList.remove('active');
    }, 100);
});