Signatur
Beschreibung
Die Eigenschaft preserveAspectRatio des Interfaces SVGMarkerElement gibt ein SVGAnimatedPreserveAspectRatio-Objekt zurück. Es enthält den Wert des Attributs preserveAspectRatio eines <marker>-Elements. Das Attribut legt fest, wie der Inhalt des Markers (definiert über viewBox) in die durch markerWidth und markerHeight vorgegebene Fläche eingepasst wird.
Das zurückgegebene Objekt hat zwei Eigenschaften:
baseVal: einSVGPreserveAspectRatiomit dem statischen Attributwert. Seine EigenschaftenalignundmeetOrSlicesind beschreibbar.animVal: einSVGPreserveAspectRatiomit dem aktuellen, eventuell durch SMIL-Animation veränderten Wert. Er ist nur lesbar.
Die Eigenschaft selbst ist schreibgeschützt. Das Objekt kannst du nicht ersetzen, wohl aber über baseVal.align und baseVal.meetOrSlice ändern. align und meetOrSlice sind numerische Konstanten wie SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMID oder SVG_MEETORSLICE_MEET. Brauchst du das nur selten, ist setAttribute('preserveAspectRatio', …) oft die einfachere Wahl.
Rückgabewert
baseVal (Grundwert) und animVal (animierter Wert), jeweils vom Typ SVGPreserveAspectRatio. Fehlt das Attribut, gilt der Standardwert xMidYMid meet.Beispiele
Ausrichtung eines Markers auslesen
const svgNS = 'http://www.w3.org/2000/svg';
const marker = document.createElementNS(svgNS, 'marker');
marker.setAttribute('viewBox', '0 0 10 10');
marker.setAttribute('preserveAspectRatio', 'xMinYMax slice');
const par = marker.preserveAspectRatio.baseVal;
console.log(par.align === SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMINYMAX);
console.log(par.meetOrSlice === SVGPreserveAspectRatio.SVG_MEETORSLICE_SLICE);
Standardwert ohne gesetztes Attribut
const marker = document.createElementNS('http://www.w3.org/2000/svg', 'marker');
const { align, meetOrSlice } = marker.preserveAspectRatio.baseVal;
// 6 = XMIDYMID, 1 = MEET
console.log(align, meetOrSlice);
Pfeilspitze nachträglich ohne Verzerrung einpassen
// Voraussetzung: <marker id="arrow" viewBox="0 0 10 6" markerWidth="10" markerHeight="10" preserveAspectRatio="none"> im Dokument
const arrow = document.querySelector('#arrow');
const base = arrow.preserveAspectRatio.baseVal;
base.align = SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMID;
base.meetOrSlice = SVGPreserveAspectRatio.SVG_MEETORSLICE_MEET;
console.log(arrow.getAttribute('preserveAspectRatio'));
Neuen Wert zuweisen schlägt fehl
'use strict';
const marker = document.createElementNS('http://www.w3.org/2000/svg', 'marker');
try {
marker.preserveAspectRatio = 'none';
} catch (err) {
console.log(err instanceof TypeError); // Getter-only-Eigenschaft
}
// Wichtig · Fallstricke
- Schreibgeschützt: Wenn du der Eigenschaft direkt etwas zuweist, passiert im Sloppy-Modus einfach nichts. Im Strict Mode wird ein
TypeErrorausgelöst. Ändern kannst du den Wert nur überbaseVal.align/baseVal.meetOrSliceodersetAttribute(). - Nur mit
viewBoxwirksam: Hat der Marker keinviewBox-Attribut, wirdpreserveAspectRatioignoriert. animValist nur lesbar: Ein Schreibversuch löst einen Fehler aus (NoModificationAllowedError).- Die Werte
SVG_PRESERVEASPECTRATIO_UNKNOWN(0) undSVG_MEETORSLICE_UNKNOWN(0) dürfen nicht zugewiesen werden. Das führt zu einem Fehler. - Elemente per
createElementNS()mit dem SVG-Namensraum erzeugen.createElement('marker')liefert keinSVGMarkerElement. - Browser-Kompatibilität: Die Eigenschaft wird von allen modernen Browsern seit Langem unterstützt.