初级版:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
body{
background-color: #000000;
}
.ball{
position: absolute;
border-radius: 50%;
}
</style>
</head>
<body>
<script>
function Ball(x,y){
this.x=x;
this.y=y;
this.r=20;
this.color='white';
this.init();
this.dx=parseInt(Math.random()*20)-10;
this.dy=parseInt(Math.random()*20)-10;
ballarr.push(this);
}
Ball.prototype.init=function(){
this.dom=document.createElement('div');
this.dom.className='ball';
this.dom.style.width=this.r*2+'px';
this.dom.style.height=this.r*2+'px';
this.dom.style.left=this.x-this.r+'px';
this.dom.style.top=this.y-this.r+'px';
this.dom.style.backgroundColor=this.color;
document.body.appendChild(this.dom);
}
Ball.prototype.update=function(){
this.x +=this.dx;
this.y +=this.dy;
this.dom.style.width=this.r*2+'px';
this.dom.style.height=this.r*2+'px';
this.dom.style.left=this.x-this.r+'px';
this.dom.style.top=this.y-this.r+'px';
}
var ballarr=[];
setInterval(function(){
for(var i=0;i<ballarr.length;i++){
ballarr[i].update();
}
},20)
document.onmousemove=function(e){
var x=e.clientX;
var y=e.clientY;
new Ball(x,y);
}
</script>
</body>
</html>
升级版:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
body {
background-color: black;
}
.ball {
position: absolute;
border-radius: 50%;
}
</style>
</head>
<body>
<script>
function Ball(x, y) {
this.x = x;
this.y = y;
this.r = 20;
this.opacity = 1;
this.color = colorArr[parseInt(Math.random() * colorArr.length)];
do {
this.dX = parseInt(Math.random() * 20) - 10;
this.dY = parseInt(Math.random() * 20) - 10;
} while (this.dX == 0 && this.dY == 0)
this.init();
ballArr.push(this);
}
Ball.prototype.init = function () {
this.dom = document.createElement('div');
this.dom.className = 'ball';
this.dom.style.width = this.r * 2 + 'px';
this.dom.style.height = this.r * 2 + 'px';
this.dom.style.left = this.x - this.r + 'px';
this.dom.style.top = this.y - this.r + 'px';
this.dom.style.backgroundColor = this.color;
document.body.appendChild(this.dom);
};
Ball.prototype.update = function () {
this.x += this.dX;
this.y -= this.dY;
this.r += 0.2;
this.opacity -= 0.01;
this.dom.style.width = this.r * 2 + 'px';
this.dom.style.height = this.r * 2 + 'px';
this.dom.style.left = this.x - this.r + 'px';
this.dom.style.top = this.y - this.r + 'px';
this.dom.style.opacity = this.opacity;
if (this.opacity < 0) {
for (var i = 0; i < ballArr.length; i++) {
if (ballArr[i] == this) {
ballArr.splice(i, 1);
}
}
document.body.removeChild(this.dom);
}
};
var ballArr = [];
var colorArr = ['#66CCCC', '#CCFF66', '#FF99CC', '#FF6666',
'#CC3399', '#FF6600'];
setInterval(function () {
for (var i = 0; i < ballArr.length; i++) {
ballArr[i].update();
}
}, 20);
document.onmousemove = function (e) {
var x = e.clientX;
var y = e.clientY;
new Ball(x, y);
};
</script>
</body>
</html>