<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Diagonal Circles Generator</title> <link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet"> </head> <body class="bg-gray-100"> <div class="flex justify-center items-center min-h-screen"> <div class="max-w-lg p-6 bg-white rounded shadow-lg"> <h1 class="text-2xl font-semibold mb-4">Diagonal Circles Generator</h1> <form id="inputForm" class="space-y-4"> <div class="flex items-center space-x-4"> <label for="numberOfCircles" class="text-gray-700">Number of Circles:</label> <input type="number" id="numberOfCircles" name="numberOfCircles" min="5" value="8" class="px-3 py-1 border rounded focus:outline-none focus:border-blue-500"> </div> <div id="colorPickers" class="grid grid-cols-5 gap-4"></div> <button type="submit" class="bg-blue-500 hover:bg-blue-600 text-white px-4 py-2 rounded focus:outline-none focus:ring focus:border-blue-300">Generate Circles</button> </form> <div class="mt-4"> <canvas id="canvas" width="400" height="400" class="border border-gray-300 rounded"></canvas> </div> </div> </div> <script> const form = document.getElementById('inputForm'); const canvas = document.getElementById('canvas'); const ctx = canvas.getContext('2d'); // Function to draw circles function drawCircles(numberOfCircles, circleColors) { const canvasWidth = canvas.width; const canvasHeight = canvas.height; const circleRadius = 20; const padding = 20; ctx.clearRect(0, 0, canvasWidth, canvasHeight); // Calculate the space between each circle const spaceBetweenCircles = (canvasWidth - (2 * padding)) / (numberOfCircles - 1); // Draw circles diagonally for (let i = 0; i < numberOfCircles; i++) { ctx.beginPath(); ctx.arc(padding + i * spaceBetweenCircles, padding + i * spaceBetweenCircles, circleRadius, 0, Math.PI * 2); ctx.fillStyle = circleColors[i]; ctx.fill(); ctx.closePath(); } } // Function to handle form submission form.addEventListener('submit', function(event) { event.preventDefault(); const numberOfCircles = parseInt(document.getElementById('numberOfCircles').value); const circleColors = Array.from({ length: numberOfCircles }, (_, i) => document.getElementById(`circleColor${i + 1}`).value); drawCircles(numberOfCircles, circleColors); }); // Dynamically generate color pickers based on the number of circles const colorPickersContainer = document.getElementById('colorPickers'); const numberOfCirclesInput = document.getElementById('numberOfCircles'); numberOfCirclesInput.addEventListener('input', function() { const numberOfCircles = parseInt(numberOfCirclesInput.value); colorPickersContainer.innerHTML = ''; // Clear existing color pickers for (let i = 1; i <= numberOfCircles; i++) { const colorPicker = document.createElement('input'); colorPicker.type = 'color'; colorPicker.id = `circleColor${i}`; colorPickersContainer.appendChild(colorPicker); } }); // Initialize color pickers numberOfCirclesInput.dispatchEvent(new Event('input')); </script> </body> </html>