<!DOCTYPE html > <html> <head> <title></title> <script type="text/javascript"> window.onload = function () { var canvas = document.getElementById("myCanvas"); var context = canvas.getContext("2d"); var btnStart = document.getElementById("btnStart"); var btnStop = document.getElementById("btnStop"); var isPlay = true; btnStart.style.display = "none"; btnStart.onclick = function () { isPlay = true; this.style.display = "none"; btnStop.style.display = ""; animate(); } btnStop.onclick = function () { isPlay = false; this.style.display = "none"; btnStart.style.display = ""; } //形状类,构造函数传入起始坐标,半径,起始角度 function Shape(x, y, radius, angle) { this.x = x; this.y = y; this.radius = radius; if (angle == undefined) { this.angle = 0; } else { this.angle = angle; } } var shapes = []; //随即产生形状 for (var i = 0; i < 10; i++) { var x = Math.random() * 250; var y = Math.random() * 250; var radius = Math.random() * 50; shapes.push(new Shape(x, y, 30)); } function animate() { context.clearRect(0, 0, canvas.width, canvas.height); var len = shapes.length; for (var i = 0; i < len; i++) { var tmpShape = shapes[i]; var angle = tmpShape.angle + Math.PI / 100; if (angle > Math.PI * 2) angle = 0; tmpShape.angle = angle; //半径是直角三角形斜边,根据角度计算x和y的偏移 var x = tmpShape.radius * Math.cos(angle); var y = tmpShape.radius * Math.sin(angle); //画出半径轨迹 context.beginPath(); context.moveTo(tmpShape.x, tmpShape.y); context.lineTo(tmpShape.x + x, tmpShape.y + y); context.stroke(); context.fillRect(tmpShape.x + x-5, tmpShape.y + y-5, 10, 10); } if (isPlay) setTimeout(animate, 33); } animate(); } </script> </head> <body> <canvas id="myCanvas" height="500px" width="500px" style="border:1px black solid"> </canvas> <input id="btnStart" type="button" value="start" > <input id="btnStop" type="button" value="stop" > </body> </html>