You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

88 lines
2.4 KiB

var canvas = document.getElementById("canvas"),
context = canvas.getContext("2d"),
w = canvas.width = window.innerWidth,
h = canvas.height = window.innerHeight,
hue = 217,
stars = [],
count = 0,
maxStars = 1600;//星星数量
var canvas2 = document.createElement("canvas"),
context2 = canvas2.getContext("2d");
canvas2.width = 100;
canvas2.height = 100;
var half = canvas2.width / 2,
gradient2 = context2.createRadialGradient(half,half,0,half,half,half);
gradient2.addColorStop(0.025,"#CCC");
gradient2.addColorStop(0.1,"hsl("+hue+",61%,33%)");
gradient2.addColorStop(0.25,"hsl("+hue+",64%,6%)");
gradient2.addColorStop(1,"transparent");
context2.fillStyle = gradient2;
context2.beginPath();
context2.arc(half,half,half,0,Math.PI*2);
context2.fill();
function random(min,max){
if(arguments.length < 2) {
max = min;
min = 0;
}
if (min > max) {
var hold = max;
max = min;
min = hold;
}
return Math.floor(Math.random()*(max-min+1))+min;
}
function maxOrbit(x, y){
var max = Math.max(x,y),diameter = Math.round(Math.sqrt(max*max+max*max));
return diameter/2;//星星移动范围,值越大范围越小,
}
var Star = function(){
this.orbitRadius = random(maxOrbit(w,h));
this.radius = random(60,this.orbitRadius)/8;//星星大小
this.orbitX = w/2;
this.orbitY = h/2;
this.timePassed = random(0,maxStars);
this.speed = random(this.orbitRadius)/50000;//星星移动速度
this.alpha = random(2, 10)/10;
count++;
stars[count] = this;
}
Star.prototype.draw = function(){
var x = Math.sin(this.timePassed)*this.orbitRadius+this.orbitX,
y = Math.cos(this.timePassed)*this.orbitRadius+this.orbitY,
twinkle = random(10);
if(twinkle === 1 && this.alpha > 0){
this.alpha -= 0.05;
}else if(twinkle === 2 && this.alpha < 1){
this.alpha += 0.05;
}
context.globalAlpha = this.alpha;
context.drawImage(canvas2,x-this.radius/2,y-this.radius/2,this.radius,this.radius);
this.timePassed += this.speed;
}
for (var i = 0; i < maxStars; i++) {
new Star();
}
function animation() {
context.globalCompositeOperation = "source-over";
context.globalAlpha = 0.5; //尾巴
context.fillStyle = "hsla("+hue+",64%,6%,2)";
context.fillRect(0,0,w,h)
context.globalCompositeOperation = "lighter";
for(var i = 1, l = stars.length;i < l;i++) {
stars[i].draw();
};
window.requestAnimationFrame(animation);
}
window.setTimeout(animation,400);