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>