MediaWiki:Common.js: Unterschied zwischen den Versionen
Admin (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung Markierung: Zurückgesetzt |
Admin (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung Markierung: Zurückgesetzt |
||
| Zeile 1.238: | Zeile 1.238: | ||
/* ============================================================ | /* ============================================================ | ||
ADOS – Silvester Feuerwerk (ES5 | ADOS – Silvester Feuerwerk (DAUERHAFT, KEIN ABDUNKELN, ES5) | ||
Läuft optional nur am 31.12/01.01 (Schalter unten) | |||
============================================================ */ | ============================================================ */ | ||
(function () { | (function () { | ||
'use strict'; | 'use strict'; | ||
// --- | // --- OPTIONAL: nur an Silvester/Neujahr aktiv --- | ||
// Wenn du es IMMER willst, setze den nächsten Wert auf false: | |||
var onlyOnNewYears = true; | |||
function isNewYears() { | function isNewYears() { | ||
var d = new Date(); | var d = new Date(); | ||
var m = d.getMonth() + 1; | var m = d.getMonth() + 1; | ||
var day = d.getDate(); | var day = d.getDate(); | ||
return (m === 12 && day === 31) || (m === 1 && day === 1); | return (m === 12 && day === 31) || (m === 1 && day === 1); | ||
} | } | ||
if (onlyOnNewYears && !isNewYears()) return; | |||
if (!isNewYears()) return; | |||
// Canvas anlegen | // Canvas anlegen | ||
| Zeile 1.267: | Zeile 1.268: | ||
c.style.pointerEvents = 'none'; | c.style.pointerEvents = 'none'; | ||
c.style.zIndex = '9999'; | c.style.zIndex = '9999'; | ||
c.style.opacity = ' | c.style.opacity = '1'; | ||
document.body.appendChild(c); | document.body.appendChild(c); | ||
return c; | return c; | ||
| Zeile 1.281: | Zeile 1.282: | ||
} | } | ||
function rand(min, max) { return min + Math.random() * (max - min); } | function rand(min, max) { return min + Math.random() * (max - min); } | ||
function clamp(v, a, b) { return Math.max(a, Math.min(b, v)); } | function clamp(v, a, b) { return Math.max(a, Math.min(b, v)); } | ||
| Zeile 1.291: | Zeile 1.291: | ||
function spawnBurst(x, y) { | function spawnBurst(x, y) { | ||
var count = Math.floor(rand( | var count = Math.floor(rand(35, 70)); | ||
var i; | var i; | ||
for (i = 0; i < count; i++) { | for (i = 0; i < count; i++) { | ||
var angle = rand(0, Math.PI * 2); | var angle = rand(0, Math.PI * 2); | ||
var speed = rand(2. | var speed = rand(2.0, 5.2); | ||
particles.push({ | particles.push({ | ||
x: x, | x: x, | ||
| Zeile 1.301: | Zeile 1.301: | ||
vx: Math.cos(angle) * speed, | vx: Math.cos(angle) * speed, | ||
vy: Math.sin(angle) * speed, | vy: Math.sin(angle) * speed, | ||
life: rand( | life: rand(650, 1200), | ||
age: 0, | age: 0, | ||
size: rand(1. | size: rand(1.4, 3.0), | ||
// | // Farben: eher „Feuerwerk/Gold“ | ||
r: Math.floor(rand( | r: Math.floor(rand(180, 255)), | ||
g: Math.floor(rand( | g: Math.floor(rand(120, 230)), | ||
b: Math.floor(rand(120 | b: Math.floor(rand(20, 120)) | ||
}); | }); | ||
} | } | ||
} | } | ||
// KEIN ABDUNKELN: | |||
// Wir löschen pro Frame einfach komplett transparent (clearRect) | |||
// -> keine dunkle Überlagerung, aber Partikel „ziehen“ keine Trails. | |||
function tick(ts) { | function tick(ts) { | ||
if (!running) return; | if (!running) return; | ||
| Zeile 1.318: | Zeile 1.321: | ||
last = ts; | last = ts; | ||
ctx.clearRect(0, 0, window.innerWidth, window.innerHeight); | |||
ctx. | |||
var i, p; | var i, p; | ||
for (i = particles.length - 1; i >= 0; i--) { | for (i = particles.length - 1; i >= 0; i--) { | ||
| Zeile 1.333: | Zeile 1.333: | ||
// Physik | // Physik | ||
p.vy += 0. | p.vy += 0.0027 * dt; | ||
p.vx *= Math.pow(0.998, dt); | p.vx *= Math.pow(0.998, dt); | ||
p.vy *= Math.pow(0.998, dt); | p.vy *= Math.pow(0.998, dt); | ||
| Zeile 1.351: | Zeile 1.351: | ||
} | } | ||
// Dauerhaft neue Bursts – Frequenz steuerbar | |||
function scheduleBursts() { | function scheduleBursts() { | ||
function loop() { | function loop() { | ||
if (!running) return; | if (!running) return; | ||
spawnBurst(rand(80, window.innerWidth - 80), rand(80, window.innerHeight * 0.55)); | spawnBurst(rand(80, window.innerWidth - 80), rand(80, window.innerHeight * 0.55)); | ||
setTimeout(loop, Math.floor(rand( | setTimeout(loop, Math.floor(rand(900, 1800))); // schneller = mehr Feuerwerk | ||
} | } | ||
loop(); | loop(); | ||
| Zeile 1.362: | Zeile 1.362: | ||
function init() { | function init() { | ||
canvas = createCanvas(); | canvas = createCanvas(); | ||
ctx = fitCanvas(canvas); | ctx = fitCanvas(canvas); | ||
window.addEventListener('resize', function () { | window.addEventListener('resize', function () { | ||
if (!canvas) return; | if (!canvas) return; | ||
| Zeile 1.372: | Zeile 1.370: | ||
}); | }); | ||
scheduleBursts(); | scheduleBursts(); | ||
requestAnimationFrame(tick); | requestAnimationFrame(tick); | ||
} | } | ||