Signatur
Beschreibung
Die Eigenschaft seed der Schnittstelle SVGFETurbulenceElement spiegelt das seed-Attribut eines <feTurbulence>-Filterprimitivs wider. Der Wert ist der Startwert für den Pseudo-Zufallsgenerator, der das Perlin-Rauschen (turbulence oder fractalNoise) erzeugt. Gleicher Startwert und gleiche übrige Parameter liefern immer dasselbe Muster. Ein anderer Startwert erzeugt ein anderes Muster mit denselben statistischen Eigenschaften.
Die Eigenschaft selbst ist schreibgeschützt und liefert ein SVGAnimatedNumber-Objekt. Über seed.baseVal liest und schreibt man den Grundwert aus dem Attribut. seed.animVal liefert den aktuellen Wert, auch während einer SMIL-Animation (<animate attributeName="seed">). Wer baseVal setzt, ändert gleichzeitig das Attribut im DOM.
Typische Anwendungen sind Papier-, Wolken-, Marmor- oder Rauschtexturen, „Glitch“- und Wabereffekte (zusammen mit <feDisplacementMap>) und neu gewürfelte Muster beim Laden der Seite oder auf Knopfdruck.
Rückgabewert
baseVal (Zahl, les- und schreibbar) und animVal (Zahl, nur lesbar). Fehlt das Attribut, ist der Standardwert 0.Beispiele
Startwert auslesen
// <svg><filter id="noise"><feTurbulence id="turb" type="fractalNoise" baseFrequency="0.8" seed="42"/></filter></svg>
const turb = document.getElementById('turb');
console.log(turb.seed instanceof SVGAnimatedNumber);
console.log(turb.seed.baseVal);
console.log(turb.seed.animVal);
Neues Rauschmuster per Knopfdruck
const turb = document.querySelector('#noise feTurbulence');
const button = document.querySelector('#reroll');
button.addEventListener('click', () => {
// Ganze Zahl verwenden, da Nachkommastellen ohnehin abgeschnitten werden
const newSeed = Math.floor(Math.random() * 10000);
turb.seed.baseVal = newSeed;
console.log(turb.getAttribute('seed'));
});
Flackernder Glitch-Effekt mit requestAnimationFrame
const turb = document.querySelector('#glitch feTurbulence');
let last = 0;
const tick = (time) => {
// Etwa 12 neue Muster pro Sekunde
if (time - last > 80) {
turb.seed.baseVal = (turb.seed.baseVal + 1) % 1000;
last = time;
}
requestAnimationFrame(tick);
};
requestAnimationFrame(tick);
// Wichtig · Fallstricke
- Nicht direkt zuweisen:
turb.seed = 5hat keine Wirkung, denn die Eigenschaft ist schreibgeschützt. Richtig istturb.seed.baseVal = 5oderturb.setAttribute('seed', '5'). - Nachkommastellen: Laut Filter-Effects-Spezifikation wird der Startwert vor der Rauscherzeugung in Richtung null auf eine ganze Zahl gekürzt.
1.2und1.9erzeugen also dasselbe Muster. Bei SMIL-Animationen ändert sich das Bild deshalb sprunghaft und nicht fließend. - Performance: Jede Änderung von
seedberechnet den ganzen Filter neu. Bei großen Filterflächen oder hohemnumOctaveskann das auf schwacher Hardware ruckeln. Ändern Sie den Wert deshalb gedrosselt und nicht in jedem Frame. - Kompatibilität: Die Eigenschaft wird in allen modernen Browsern unterstützt. Die Rauschmuster sind je nach Browser aber nicht garantiert pixelgenau gleich.