console
var canvas = document.getElementById('canvas');
var H = 300,W = 500;
canvas.height = H;
canvas.width = W;
var Num = 30;
btn.onclick = function(){history.go();}
var balls = [];
function getBalls(){
var cxt = canvas.getContext('2d');
for (var i = 0; i < Num; i++) {
var tempR = (Math.random()*255)|0;
var tempG = (Math.random()*255)|0;
var tempB = (Math.random()*255)|0;
var tempColor = 'rgb(' +tempR+','+tempG +','+tempB+')';
var posiR = (Math.random()*30+20)|0;
var posiX = (Math.random()*(W-posiR))|0;
var posiY = (Math.random()*(H-posiR))|0;
var tempBall = {
x:posiX,
y:posiY,
r:posiR,
stepX:(Math.random()*13-6)|0,
stepY:(Math.random()*13-6)|0,
color:tempColor
}
balls[balls.length] = tempBall;
}
}
var bumpTest = function(ele){
if(ele.x <= ele.r){
ele.x = ele.r;
ele.stepX = -ele.stepX;
}
if(ele.x >= W - ele.r){
ele.x = W - ele.r;
ele.stepX = -ele.stepX;
}
if(ele.y <= ele.r){
ele.y = ele.r;
ele.stepY = -ele.stepY;
}
if(ele.y >= H - ele.r){
ele.y = H - ele.r;
ele.stepY = -ele.stepY;
}
}
var updateBalls = function (){
var i = balls.length;
while(i--){
balls[i].x += balls[i].stepX;
balls[i].y += balls[i].stepY;
bumpTest(balls[i]);
}
}
var renderBalls = function (){
canvas.height = H;
var cxt = canvas.getContext('2d');
var i = balls.length;
while(i--){
cxt.beginPath();
cxt.arc(balls[i].x,balls[i].y,balls[i].r,0,2*Math.PI);
cxt.fillStyle = balls[i].color;
cxt.globalCompositeOperation = 'lighter';
cxt.closePath();
cxt.fill();
}
}
getBalls();
clearInterval(oTimer);
var oTimer = setInterval(function(){
updateBalls();
renderBalls();
},50)
<canvas id="canvas" style="border:1px solid #ddd;width: 500;height: 300"></canvas>
<button id="btn">刷新</button>