<!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, width, height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
this.vX = 2;
this.vY = 2;
}
var shapes = [];
//随即产生形状
for (var i = 0; i < 10; i++) {
var x = Math.random() * 250;
var y = Math.random() * 250;
var width = Math.random() * 50;
shapes.push(new Shape(x, y, width, width));
}
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];
//检测是否是边界,是的话速度反转
if ((tmpShape.x + tmpShape.width > canvas.width && tmpShape.vX > 0)
|| (tmpShape.x < 0 && tmpShape.vX < 0)) {
tmpShape.vX = -tmpShape.vX;
}
if ((tmpShape.y + tmpShape.height > canvas.height && tmpShape.vY > 0)
|| (tmpShape.y < 0 && tmpShape.vY < 0)) {
tmpShape.vY = -tmpShape.vY;
}
tmpShape.x += tmpShape.vX;
tmpShape.y += tmpShape.vY;
context.fillRect(tmpShape.x, tmpShape.y, tmpShape.width, tmpShape.height);
}
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>