Signatur
Beschreibung
animVal gehört zum Interface SVGAnimatedBoolean. Das Interface steht für SVG-Attribute, die nur die Werte true oder false annehmen und per SMIL animiert werden können. Das wichtigste Beispiel ist SVGFEConvolveMatrixElement.preserveAlpha, also das Attribut preserveAlpha des Filterelements <feConvolveMatrix>.
Jedes SVGAnimatedBoolean hat zwei Werte. baseVal ist der Grundwert aus dem Markup oder aus einem Skript. animVal ist der Wert, der gerade tatsächlich gilt. Läuft eine Animation, etwa mit <set> oder <animate>, soll animVal den animierten Wert zeigen. Läuft keine Animation, haben animVal und baseVal denselben Wert.
Verwende animVal, wenn du den aktuell wirksamen Zustand auslesen willst, zum Beispiel für Debugging oder um ein Skript mit einer laufenden Animation abzustimmen. Wenn du den Wert ändern willst, schreibst du in baseVal. animVal ist schreibgeschützt.
Rückgabewert
preserveAlpha ist das false).Beispiele
preserveAlpha eines feConvolveMatrix-Filters auslesen
const SVG_NS = 'http://www.w3.org/2000/svg';
const conv = document.createElementNS(SVG_NS, 'feConvolveMatrix');
conv.setAttribute('kernelMatrix', '0 -1 0 -1 5 -1 0 -1 0');
conv.setAttribute('preserveAlpha', 'true');
// Aktuell wirksamen Wert lesen
console.log(conv.preserveAlpha.animVal);
console.log(typeof conv.preserveAlpha.animVal);
baseVal ändern, animVal übernimmt den Wert
const SVG_NS = 'http://www.w3.org/2000/svg';
const conv = document.createElementNS(SVG_NS, 'feConvolveMatrix');
console.log(conv.preserveAlpha.animVal); // Standardwert
// Nur baseVal darf beschrieben werden
conv.preserveAlpha.baseVal = true;
console.log(conv.getAttribute('preserveAlpha'));
console.log(conv.preserveAlpha.animVal); // keine Animation => gleich baseVal
animVal ist schreibgeschützt
'use strict';
const SVG_NS = 'http://www.w3.org/2000/svg';
const conv = document.createElementNS(SVG_NS, 'feConvolveMatrix');
try {
conv.preserveAlpha.animVal = true;
} catch (err) {
console.log(err instanceof TypeError); // im Strict Mode: TypeError
}
console.log(conv.preserveAlpha.animVal);
Wert während einer SMIL-Animation mit <set> prüfen
document.body.insertAdjacentHTML('beforeend', `
<svg width="0" height="0">
<filter id="f">
<feConvolveMatrix id="conv" kernelMatrix="1 0 0 0 1 0 0 0 1" preserveAlpha="false">
<set attributeName="preserveAlpha" to="true" begin="0s" dur="10s" />
</feConvolveMatrix>
</filter>
</svg>`);
const conv = document.getElementById('conv');
setTimeout(() => {
console.log('baseVal:', conv.preserveAlpha.baseVal);
console.log('animVal:', conv.preserveAlpha.animVal);
}, 500);
// Wichtig · Fallstricke
- Uneinheitliches Verhalten der Browser: Viele Engines zeigen SMIL-Animationen in
animValnicht zuverlässig an und liefern dort einfach denselben Wert wiebaseVal. Deshalb ist es riskant, Programmlogik auf animierte Werte inanimValaufzubauen. - Schreibgeschützt: Wird
animValein Wert zugewiesen, passiert im Sloppy Mode stillschweigend nichts. Im Strict Mode wirft das einenTypeError. Änderungen gehören inbaseValoder laufen übersetAttribute(). - Nur für SVG-Elemente:
SVGAnimatedBooleangibt es nur, wenn das Element im SVG-Namensraum angelegt wurde (createElementNS('http://www.w3.org/2000/svg', …)). Ein mitcreateElementerzeugtes Element hat keine solchen Eigenschaften. - Veraltete Attribute:
externalResourcesRequiredwar früher ebenfalls einSVGAnimatedBoolean. Es wurde in SVG 2 entfernt und sollte nicht mehr benutzt werden. - CSS-Animationen wirken nicht auf
preserveAlpha, denn es ist ein reines Attribut und keine CSS-Eigenschaft.