1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> *{padding: 0; margin: 0;} #canvas { width: 100%; height: 100%; position: absolute; top: 0; left: 0; } </style> </head> <body> <canvas id="canvas"></canvas> <script> const canvas = document.getElementById('canvas') const ctx = canvas.getContext('2d') canvas.width = window.innerWidth canvas.height = window.innerHeight class Circle { constructor(x, y, dx, dy, radius) { this.x = x this.y = y this.dx = dx this.dy = dy this.radius = radius this.color = 'hsla('+(Math.random()*360)+', 100%, 50%, 0.6)' } draw() { ctx.beginPath() ctx.fillStyle = this.color ctx.arc(this.x,this.y,this.radius,0,2*Math.PI, false) ctx.fill() } update() { if(this.x + this.radius > canvas.width || this.x-this.radius < 0){ this.dx = -this.dx } if(this.y+this.radius > canvas.height || this.y-this.radius < 0) { this.dy = -this.dy } this.x += this.dx this.y += this.dy this.draw() } } var circleArray = [] for (let i = 0; i < 50; i++) { let x = Math.random() * (canvas.width-radius*2) + radius let y = Math.random() * (canvas.height-radius*2) + radius let dx = (Math.random() - 0.5) * 6 let dy = (Math.random() - 0.5) * 8 let radius = 30 circleArray.push(new Circle(x,y,dx,dy,radius)) } function animate() { requestAnimationFrame(animate) ctx.clearRect(0,0,canvas.width,canvas.height) for (let i = 0; i < circleArray.length; i++) { circleArray[i].update() } } animate() </script> </body> </html>
|