Signatur
Beschreibung
Die schreibgeschützte Eigenschaft baseFrequencyY des Interfaces SVGFETurbulenceElement steht für die vertikale Grundfrequenz des Rauschens, das ein <feTurbulence>-Filter erzeugt. Sie entspricht dem zweiten Wert des Attributs baseFrequency. Wurde dort nur ein Wert angegeben, gilt er für beide Achsen – baseFrequencyY hat dann denselben Wert wie baseFrequencyX.
Zurückgegeben wird eine Zahl nicht direkt, sondern ein SVGAnimatedNumber-Objekt. Über baseVal bekommst du den im Attribut gesetzten Grundwert, über animVal den aktuellen Wert, wenn gerade eine SMIL-Animation läuft (z. B. <animate attributeName="baseFrequency">). Die Eigenschaft selbst ist schreibgeschützt, man kann ihr also kein neues Objekt zuweisen.
Praktisch braucht man baseFrequencyY, wenn man per Skript prüfen will, wie ein Turbulenz-Filter eingestellt ist, etwa bei interaktiven Effekten für Wasser, Nebel, Holzmaserung oder Wellen. Unterschiedliche X- und Y-Frequenzen ergeben gestreckte Muster: Ist Y kleiner als X, wird das Rauschen vertikal gedehnt, ist Y größer, horizontal.
Rückgabewert
baseVal (Grundwert aus dem Attribut, number) und animVal (aktueller, eventuell animierter Wert, number, nur lesbar). Standardwert ist 0, wenn baseFrequency fehlt.Beispiele
Y-Frequenz eines bestehenden Filters auslesen
// HTML: <svg><filter id="noise"><feTurbulence id="turb" baseFrequency="0.02 0.1" numOctaves="3"/></filter></svg>
const turb = document.getElementById('turb');
console.log(turb.baseFrequencyX.baseVal);
console.log(turb.baseFrequencyY.baseVal);
Ein Wert im Attribut gilt für beide Achsen
const SVG_NS = 'http://www.w3.org/2000/svg';
const turb = document.createElementNS(SVG_NS, 'feTurbulence');
turb.setAttribute('baseFrequency', '0.05');
const { baseFrequencyX: x, baseFrequencyY: y } = turb;
console.log(x.baseVal === y.baseVal); // gleiche Frequenz in X und Y
console.log(y.baseVal.toFixed(2));
Vertikale Frequenz per Schieberegler ändern
// HTML: <input type="range" id="ySlider" min="0.001" max="0.2" step="0.001">
const turb = document.querySelector('#noise feTurbulence');
const slider = document.getElementById('ySlider');
slider.addEventListener('input', () => {
const x = turb.baseFrequencyX.baseVal;
const y = Number(slider.value);
// Beide Werte zusammen setzen, damit X erhalten bleibt
turb.setAttribute('baseFrequency', `${x} ${y}`);
console.log('Neue Y-Frequenz:', turb.baseFrequencyY.baseVal.toFixed(3));
});
Animierten Wert (animVal) beobachten
// HTML: <feTurbulence id="turb" baseFrequency="0.01 0.01">
// <animate attributeName="baseFrequency" values="0.01 0.01;0.01 0.1;0.01 0.01" dur="4s" repeatCount="indefinite"/>
// </feTurbulence>
const turb = document.getElementById('turb');
const log = () => {
const { baseVal, animVal } = turb.baseFrequencyY;
console.log(`Basis: ${baseVal.toFixed(3)}, aktuell: ${animVal.toFixed(3)}`);
};
setInterval(log, 1000);
// Wichtig · Fallstricke
- Schreibgeschützt:
turb.baseFrequencyY = 0.1hat keine Wirkung (im Strict Mode gibt es einenTypeError). Ändern lässt sich nurbaseFrequencyY.baseValoder, am zuverlässigsten, das Attribut übersetAttribute('baseFrequency', 'x y'). - Doppelwert-Attribut: Weil X und Y aus demselben Attribut kommen, setzen manche Browser beim Schreiben von
baseValnicht sauber beide Werte zurück ins Attribut. Setze für browserübergreifend gleiches Verhalten deshalb beide Werte gemeinsam persetAttribute. - Genauigkeit: Die Werte werden als 32-Bit-Gleitkommazahlen gespeichert, daher liefert
0.1z. B.0.10000000149011612. Zum Vergleichen und Anzeigen runden (toFixed). - Negative Werte sind laut Spezifikation ungültig und führen zu einem Fehler bzw. dazu, dass der Filter nicht angewendet wird.
0schaltet das Rauschen auf dieser Achse faktisch ab. animValändert sich nur bei SMIL-Animationen, nicht bei CSS-Transitions, dennbaseFrequencyist keine CSS-Eigenschaft.- Leistung: Turbulenzfilter mit hohem
numOctavesauf großen Flächen sind aufwendig zu berechnen. Wenn du die Frequenz häufig änderst, drossle die Aktualisierungen (z. B. mitrequestAnimationFrame). - Browser: Wird von allen modernen Browsern (Chrome, Firefox, Safari, Edge) unterstützt.