JSFiddle - React, Tailwind, and code Playground

by Chris

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Canvas Overlay on YouTube</title>
    <style>
        body {
            margin: 0;
            overflow: hidden;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            background: black;
        }
        .video-container {
            position: relative;
            width: 80vw;
            height: 45vw; /* Maintain 16:9 aspect ratio */
            max-width: 1280px;
            max-height: 720px;
        }
        iframe {
            position: absolute;
            width: 100%;
            height: 100%;
            z-index: 1;
        }
        canvas {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            z-index: 2;
            pointer-events: none; /* Allows clicks to pass through to video */
        }
    </style>
</head>
<body>

<div class="video-container">
    <iframe id="ytplayer" src="https://www.youtube.com/embed/7wQk7K_l-DU?autoplay=1&mute=1"
            frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
    <canvas id="overlayCanvas"></canvas>
</div>

<script>
    const canvas = document.getElementById('overlayCanvas');
    const ctx = canvas.getContext('2d');

    function resizeCanvas() {
        canvas.width = canvas.clientWidth;
        canvas.height = canvas.clientHeight;
        drawOverlay();
    }

    function drawOverlay() {
        ctx.clearRect(0, 0, canvas.width, canvas.height);
        ctx.fillStyle = "rgba(255, 0, 0, 0.5)";
        ctx.fillRect(50, 50, 200, 100);
        ctx.fillStyle = "#fff";
        ctx.font = "20px Arial";
        ctx.fillText("Canvas Overlay", 70, 100);
    }

    window.addEventListener('resize', resizeCanvas);
    resizeCanvas();
</script>

</body>
</html>