const stars = (function(){ var canvas = document.createElement("canvas"), ctx = canvas.getContext('2d') var s = Math.sin, c = Math.cos document.addEventListener("DOMContentLoaded", function(){ document.body.appendChild(canvas) canvas.classList.add('stars') canvas.style.width="100%" canvas.style.height="100%" canvas.style.position="fixed" canvas.style.top="0px" canvas.style.left="0px" canvas.style.zIndex=-1 document.body.addEventListener("resize", build) // document.body.parentNode.style.backgroundColor="black" ctx.strokeStyle="white" build() }) function ri(n){ return Math.random() * n } function rr(a,b){ return (b-a) * Math.random() + a } function build(d,ar){ d = d || 0.1 var w = canvas.width = window.innerWidth * window.devicePixelRatio var h = canvas.height = window.innerHeight * window.devicePixelRatio ctx.clearRect(0,0,w,h) var n = Math.sqrt(w*h*d)|0 while (n--) { var x = ri(w) var y = ri(h) var r0 = rr(0, 1) var r1 = rr(0, 1) var r2 = rr(0, 1) var t0 = ri(2*Math.PI) var t1 = ri(2*Math.PI) var t2 = ri(2*Math.PI) var x0 = x+c(t0)*r0 var y0 = y+s(t0)*r0 var x1 = x+c(t1)*r1 var y1 = y+s(t1)*r1 var x2 = x+c(t2)*r2 var y2 = y+s(t2)*r2 ctx.beginPath() ctx.moveTo(x,y) ctx.bezierCurveTo(x0,y0,x1,y1,x2,y2) var ch = rr(0, 255)|0 ctx.strokeStyle=ar ? "rgb("+ch+",0,0)" : "rgb("+ch+","+ch+","+ch+")" ctx.stroke() } } let rebuilding = false function rebuild(d,ar){ if (rebuilding) return rebuilding = true canvas.classList.add('fade') document.body.classList.add('fade') setTimeout(() => { // destroy() build(d,ar) canvas.classList.remove('fade') document.body.classList.remove('fade') rebuilding = false }, 500) } return { rebuild: rebuild } })()