Let it snow..
Für Greasemonkey und Tampermonkey ein bisschen Weihnachtsstimmung.
Edit: Der Schnee lässt sich mit "^" an (Standard: An) und abschalten.
Hier ein Weg die Schneekanone immer zu zünden oder abzuschalten: https://ngb.to/threads/107883-NGB-Le...64#post1098064
Merry X-Mas!Code (JavaScript):
// ==UserScript== // @name NGB LetItSnow // @version 1 // @grant none // @include https://ngb.to/* // @include https://www.ngb.to/* // ==/UserScript== let canvasElement = document.createElement('canvas') canvasElement.width = '2000' canvasElement.height = '1600' document.body.append(canvasElement) canvasElement.style['position'] = 'fixed' canvasElement.style['left'] = '0px' canvasElement.style['top'] = '0px' canvasElement.style['z-index'] = '100' canvasElement.style['background'] = 'transparent' canvasElement.style['maxwidth'] = '100%' canvasElement.style['maxheight'] = '100%' canvasElement.style['user-select'] = 'none' canvasElement.style['pointer-events'] = 'none' let ctx = canvasElement.getContext('2d') let pi2 = 2 * Math.PI let particles = [] let particleCount = 250 let wind = 0 let doSnow = true function setup() { ctx.clearRect(0, 0, canvasElement.width, canvasElement.height) for (let i = 0; i < particleCount; i++) { particles.push(new particle((Math.random() * canvasElement.width) + 5, (Math.random() * canvasElement.height - 5), Math.random() * 4 + 1, 1, 0.125, 1, 1.125, 0.15)) } window.requestAnimationFrame(drawSnow) } class particle { constructor(x, y, size, maxSpeedX, minSpeedX, maxSpeedY, minSpeedY) { this.wind = 0 this.x = x this.y = y this.size = size this.speedX = (Math.random() * maxSpeedX + minSpeedX) this.speedY = (Math.random() * maxSpeedY + minSpeedY) } moveBySpeed() { this.x += this.speedX; this.y += this.speedY; this.x += wind //this.size += this.y / (canvasElement.height * 75) } } function drawSnow() { ctx.clearRect(0, 0, canvasElement.width, canvasElement.height) if (!doSnow) return wind = (Math.random() * 1) + (Math.random() * -1) let deleted = 0 for (let i = 0; i < particles.length; ++i) { let particle = particles[i] particle.moveBySpeed() if (particle.x <= 0 || particle.x > canvasElement.width) { particles.splice(i, 1) --i ++deleted } else if (particle.y <= 0 || particle.y > canvasElement.height) { particles.splice(i, 1) --i ++deleted } } for (let i = 0; i < deleted; ++i) particles.push(new particle((Math.random() * canvasElement.width) + 1, 1, Math.random() * 4 + 1, 1, 0.125, 1, 1.125, 0.15)) /* ctx.fillStyle = '#333' ctx.beginPath() for (let particle of particles) { ctx.moveTo(particle.x, particle.y) ctx.arc(particle.x, particle.y, particle.size, 0, pi2) } */ ctx.fill() ctx.fillStyle = '#fff' ctx.beginPath() for (let particle of particles) { ctx.moveTo(particle.x, particle.y) ctx.arc(particle.x - (particle.size * 0.25), particle.y - (particle.size * 0.25), particle.size * 0.75, 0, pi2) } ctx.fill() window.requestAnimationFrame(drawSnow) } let cookieData = document.cookie.split('; ') for (let cookie of cookieData) { if (cookie.startsWith('doSnow')) { doSnow = cookie.split('=')[1] === 'false' ? false : true document.cookie = 'doSnow=; max-age=-1' } } document.cookie = 'doSnow=' + doSnow.toString() + '; domain=ngb.to; path=/' setup() document.addEventListener('keyup', function (evt) { if (evt.key === 'Dead') { doSnow = !doSnow document.cookie = 'doSnow=; max-age=-1'; document.cookie = 'doSnow=' + doSnow.toString() + '; domain=ngb.to; path=/' if (doSnow) window.requestAnimationFrame(drawSnow) else ctx.clearRect(0, 0, window.innerWidth, window.innerHeight) } })