2023-03-21 13:54:36 +08:00

1 line
2.3 KiB
JavaScript

!function(){window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame;const t=.05,i=DreamConfig.effects_universe_mode,s=document.createElement("canvas");let e,n,h,a=!0;const o="226,225,224",c=[];let r;function d(){e=window.innerWidth,n=window.innerHeight,h=.216*e,s.setAttribute("width",e),s.setAttribute("height",n),s.setAttribute("class","canvas_effects "+i),document.body.insertBefore(s,document.body.firstChild)}function f(){r.clearRect(0,0,e,n);for(var t=c.length,i=0;i<t;i++){var s=c[i];s.move(),s.fadeIn(),s.fadeOut(),s.draw()}}function u(){this.reset=function(){this.giant=l(3),this.comet=!this.giant&&!a&&l(10),this.x=m(0,e-10),this.y=m(0,n),this.r=m(1.1,2.6),this.dx=m(t,6*t)+(this.comet+1-1)*t*m(50,120)+.1,this.dy=-m(t,6*t)-(this.comet+1-1)*t*m(50,120),this.fadingOut=null,this.fadingIn=!0,this.opacity=0,this.opacityTresh=m(.2,1-.4*(this.comet+1-1)),this.do=m(5e-4,.002)+.001*(this.comet+1-1)},this.fadeIn=function(){this.fadingIn&&(this.fadingIn=!(this.opacity>this.opacityTresh),this.opacity+=this.do)},this.fadeOut=function(){this.fadingOut&&(this.fadingOut=!(this.opacity<0),this.opacity-=this.do/2,this.x>e||this.y<0)&&(this.fadingOut=!1,this.reset())},this.draw=function(){if(r.beginPath(),this.giant)r.fillStyle="rgba(180,184,240,"+this.opacity+")",r.arc(this.x,this.y,2,0,2*Math.PI,!1);else if(this.comet){r.fillStyle="rgba("+o+","+this.opacity+")",r.arc(this.x,this.y,1.5,0,2*Math.PI,!1);for(var t=0;t<30;t++)r.fillStyle="rgba("+o+","+(this.opacity-this.opacity/20*t)+")",r.rect(this.x-this.dx/4*t,this.y-this.dy/4*t-2,2,2),r.fill()}else r.fillStyle="rgba(226,225,142,"+this.opacity+")",r.rect(this.x,this.y,this.r,this.r);r.closePath(),r.fill()},this.move=function(){this.x+=this.dx,this.y+=this.dy,!1===this.fadingOut&&this.reset(),(this.x>e-e/4||this.y<0)&&(this.fadingOut=!0)},setTimeout(function(){a=!1},50)}function l(t){return Math.floor(1e3*Math.random())+1<10*t}function m(t,i){return Math.random()*(i-t)+t}d(),window.addEventListener("resize",d,!1),r=s.getContext("2d");for(var y=0;y<h;y++)c[y]=new u,c[y].reset();f(),function t(){var i=document.documentElement.classList.contains("night");(s.classList.contains("all")||s.classList.contains("day")&&!i||s.classList.contains("night")&&i)&&f(),window.requestAnimationFrame(t)}()}();