Changed around line 1
+ const canvas = document.getElementById('wallpaper-canvas');
+ const ctx = canvas.getContext('2d');
+ const bgColor = document.getElementById('bg-color');
+ const animationSpeed = document.getElementById('animation-speed');
+ const elementSelect = document.getElementById('element-select');
+ const addElementBtn = document.getElementById('add-element');
+ const saveWallpaperBtn = document.getElementById('save-wallpaper');
+
+ let elements = [];
+ let animationFrame;
+
+ // Set canvas size
+ function setCanvasSize() {
+ canvas.width = canvas.offsetWidth;
+ canvas.height = canvas.offsetHeight;
+ }
+
+ // Create new element
+ function createElement(type) {
+ return {
+ type,
+ x: Math.random() * canvas.width,
+ y: Math.random() * canvas.height,
+ size: Math.random() * 50 + 20,
+ speed: Math.random() * 2 + 1,
+ angle: Math.random() * Math.PI * 2,
+ color: `hsl(${Math.random() * 360}, 50%, 50%)`
+ };
+ }
+
+ // Draw elements
+ function drawElements() {
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+ ctx.fillStyle = bgColor.value;
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
+
+ elements.forEach(element => {
+ ctx.beginPath();
+ ctx.fillStyle = element.color;
+
+ switch(element.type) {
+ case 'Circle':
+ ctx.arc(element.x, element.y, element.size / 2, 0, Math.PI * 2);
+ break;
+ case 'Square':
+ ctx.fillRect(element.x - element.size/2, element.y - element.size/2, element.size, element.size);
+ break;
+ case 'Triangle':
+ ctx.moveTo(element.x, element.y - element.size/2);
+ ctx.lineTo(element.x + element.size/2, element.y + element.size/2);
+ ctx.lineTo(element.x - element.size/2, element.y + element.size/2);
+ ctx.closePath();
+ break;
+ }
+
+ ctx.fill();
+
+ // Update position
+ element.x += Math.cos(element.angle) * element.speed;
+ element.y += Math.sin(element.angle) * element.speed;
+
+ // Bounce off edges
+ if (element.x < 0 || element.x > canvas.width) element.angle = Math.PI - element.angle;
+ if (element.y < 0 || element.y > canvas.height) element.angle = -element.angle;
+ });
+ }
+
+ // Animation loop
+ function animate() {
+ drawElements();
+ animationFrame = requestAnimationFrame(animate);
+ }
+
+ // Event listeners
+ window.addEventListener('resize', () => {
+ setCanvasSize();
+ drawElements();
+ });
+
+ bgColor.addEventListener('input', drawElements);
+
+ animationSpeed.addEventListener('input', () => {
+ elements.forEach(element => {
+ element.speed = animationSpeed.value;
+ });
+ });
+
+ addElementBtn.addEventListener('click', () => {
+ elements.push(createElement(elementSelect.value));
+ });
+
+ saveWallpaperBtn.addEventListener('click', () => {
+ const link = document.createElement('a');
+ link.download = 'wallpaper.gif';
+ link.href = canvas.toDataURL('image/gif');
+ link.click();
+ });
+
+ // Initialize
+ setCanvasSize();
+ animate();