Signatur
Beschreibung
Die schreibgeschützte Eigenschaft points von SVGPolylineElement gibt eine SVGPointList zurück, die den Basiswert (also den nicht animierten Wert) des Attributs points repräsentiert. Jeder Eintrag ist ein DOMPoint (früher SVGPoint) mit den Koordinaten x und y im Benutzerkoordinatensystem.
„Schreibgeschützt“ bezieht sich nur auf die Referenz: Man kann polyline.points kein neues Objekt zuweisen, die Liste selbst ist aber live und veränderbar. Mit Methoden wie appendItem(), insertItemBefore(), replaceItem(), removeItem() und clear() lassen sich Punkte hinzufügen oder entfernen – das Attribut points im DOM wird dabei automatisch aktualisiert und umgekehrt.
Typische Einsatzfälle sind dynamisch gezeichnete Linienzüge, etwa Echtzeit-Diagramme (Sparklines), Freihandzeichnen per Maus oder das Auslesen und Transformieren vorhandener Koordinaten. Wer den animierten Wert (z. B. während einer SMIL-Animation) benötigt, verwendet stattdessen animatedPoints.
Rückgabewert
points-Attributs. Änderungen an der Liste wirken sich sofort auf das Element und dessen Attribut aus.Beispiele
Punkte einer Polylinie auslesen
const svgNS = 'http://www.w3.org/2000/svg';
const svg = document.createElementNS(svgNS, 'svg');
const polyline = document.createElementNS(svgNS, 'polyline');
polyline.setAttribute('points', '0,40 40,40 40,80 80,80');
svg.append(polyline);
document.body.append(svg);
const { points } = polyline;
console.log(points.numberOfItems);
for (let i = 0; i < points.numberOfItems; i++) {
const p = points.getItem(i);
console.log(`Punkt ${i}: ${p.x}/${p.y}`);
}
Punkt per appendItem hinzufügen (live Liste)
const svg = document.querySelector('svg');
const polyline = svg.querySelector('polyline');
// Neuen Punkt erzeugen und anhängen
const pt = svg.createSVGPoint(); // alternativ: new DOMPoint(120, 20)
pt.x = 120;
pt.y = 20;
polyline.points.appendItem(pt);
// Das Attribut wurde automatisch aktualisiert
console.log(polyline.getAttribute('points'));
Echtzeit-Sparkline mit begrenzter Punktzahl
const svgNS = 'http://www.w3.org/2000/svg';
const svg = document.createElementNS(svgNS, 'svg');
svg.setAttribute('width', '200');
svg.setAttribute('height', '50');
const line = document.createElementNS(svgNS, 'polyline');
line.setAttribute('fill', 'none');
line.setAttribute('stroke', 'teal');
svg.append(line);
document.body.append(svg);
const MAX = 20;
let t = 0;
setInterval(() => {
const list = line.points;
list.appendItem(new DOMPoint(0, 25 + Math.sin(t++ / 2) * 20));
if (list.numberOfItems > MAX) list.removeItem(0);
// x-Koordinaten neu verteilen
for (let i = 0; i < list.numberOfItems; i++) {
list.getItem(i).x = i * (200 / (MAX - 1));
}
}, 200);
// Wichtig · Fallstricke
- Keine Zuweisung:
polyline.points = …wird ignoriert (im Strict ModeTypeError). Zum kompletten ErsetzensetAttribute('points', '…')oderpoints.clear()+appendItem()verwenden. appendItem()undinsertItemBefore()verschieben ein Punktobjekt, das bereits in einer anderen Liste steckt, statt es zu kopieren.- Neuere Browser akzeptieren
DOMPoint-Objekte;SVGSVGElement.createSVGPoint()gilt als veraltet, funktioniert aber weiterhin überall. - Die Liste hat
lengthundnumberOfItems; Index-Zugriff perpoints[i]wird von modernen Browsern unterstützt,getItem(i)ist am kompatibelsten. - Bei vielen Punkten ist das einmalige Setzen des Attributs per String oft schneller als viele einzelne
appendItem()-Aufrufe. - Browser-Kompatibilität: in allen aktuellen Browsern unterstützt.