SVG viewBox: Interaktive Datenvisualisierungen mit JavaScript animieren

CSS-Tricks beschreibt eine Technik für animierte SVG-Datenvisualisierungen, bei der JavaScript den sichtbaren Ausschnitt eines Bildes über die viewBox verändert. Die Grafik bleibt dabei ein SVG, während sich der Bereich mit den relevanten Informationen vergrößert oder verschiebt.

Die viewBox legt mit vier Werten den Koordinatenraum eines SVG fest: min-x, min-y, Breite und Höhe. Wird sie während der Laufzeit angepasst, kann eine Anwendung von einer Gesamtansicht in eine Detailansicht wechseln. Das Muster ist für interaktive Medien, Karten und technische Oberflächen interessant.

getBBox liefert den passenden Ausschnitt

Für die Berechnung muss der relevante SVG-Bereich nicht von Hand vermessen werden. Die Methode getBBox() liefert die Koordinaten und Abmessungen des umschließenden Rechtecks. Diese Werte lassen sich zu einer neuen viewBox-Zeichenkette zusammensetzen und anschließend mit setAttribute("viewBox", newView) auf das SVG anwenden.

Animation mit JavaScript oder GSAP

Für den Übergang kann JavaScript die Koordinaten über requestAnimationFrame schrittweise ändern. Alternativ animiert das GreenSock-Attributmodul die Werte und übernimmt die zeitliche Kurve. Die Beispiele des Beitrags zeigen unter anderem eine interaktive Karte, bei der ein Klick auf eine Region den Ausschnitt verschiebt und zusätzliche Informationen einblendet.

Für technische Teams ist die Trennung aus Vektordaten, Ausschnitt und Interaktion praktisch: Die Grafik bleibt skalierbar, während die Oberfläche nur den sichtbaren Bereich neu setzt. In interaktiven Anwendungen kann derselbe Ansatz für Karten, Diagramme oder fokussierte Informationsansichten verwendet werden.

SVG-Grafik mit dynamischem viewBox-Ausschnitt für eine interaktive Datenvisualisierung - Bild: CSS-Tricks
SVG-Grafik mit dynamischem viewBox-Ausschnitt für eine interaktive Datenvisualisierung – Bild: CSS-Tricks

Weitere News

Weitere News

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein