SVG/Tutorials/SVG und JavaScript
SVG verwendet genau wie HTML das DOM (Document Object Model), bei dem Sie mit JavaScript auf jedes SVG-Element einfach zugreifen können.
Bei standalone SVG-Dokumenten können Sie im Definitionsabschnitt einen script-Bereich definieren und so JavaScript einbinden. Allerdings ist genau diese Fähigkeit, Scripte auszuführen, Gift für einen Einsatz von SVG-Grafiken im CMS.
Dieser Kurs soll kein Showcase dafür sein, was mit SVG und JavaScript geht – sondern Beispiele zeigen, wie man SVG in Webseiten sinnvoll durch JavaScript erweitert.
- Vorüberlegungen
- Script in SVG
- DOM-Scripting
- Eventhandling
- DOM-Methoden
- externe SVG-Dokumente ansprechen
- Animation
- WAAPI
- Schrift von Zauberhand
- Kamerafahrt
- Datenvisualisierung
- Diagramm-Generator
- Frameworks
Vorüberlegungen
Inline-SVG ist Teil des DOMs einer Webseite und kann problemlos mit den DOM-Methoden angesprochen werden.
Bei einer Einbindung von SVG-Grafiken mit dem img- oder picture-Element erwarten Benutzer aber nur eine Grafik. Aus diesen Gründen ist das Ausführen von Skripten, das Laden weiterer externer Dateien wie Stylesheets oder Bilder und das Kennzeichnen von visited-Links (History-Stealing) nicht möglich.[1]
SVG in externen Dateien ansprechen
Dies geht nur, wenn Sie eine externe SVG-Datei in einem object- oder iframe-Element einbinden. Allerdings ist das SVG-DOM dann nicht Teil des DOMs der Webseite und muss erst separat angesprochen werden, bevor Sie auf die in der externen Grafik enthaltenen SVG-Elemente zugreifen können.[2]
Die Inhalte solcher SVGs lassen sich nur mit Einschränkungen manipulieren, wenn ein Skript von der HTML-Seite versucht, auf diese Dateien zuzugreifen. Dies liegt daran, dass die meisten Browser sog. Cross-Site-Scripting unterbinden wollen, selbst wenn sich die HTML-Seite und die SVG-Dokumente auf demselben Server befinden.
script in SVG
Mit dem Element script können Sie einen oder mehrere Script-Bereiche im Definitionsabschnitt eines SVG-Dokuments definieren. Innerhalb von Script-Bereichen können Sie Anweisungen der verwendeten Script-Sprache notieren.
<svg viewbox="0 0 880 410">
<defs>
<!-- der Script Bereich -->
<script type="text/javascript">
<![CDATA[
function meldung(){
alert('SVG-Element wurde angeklickt!');
}
]]>
</script>
</defs>
<circle cx="100" cy="100" r="25" fill="#c32e04" onclick="meldung()" />
</svg>
Viele Beispiele im Netz wollen zeigen, was alles möglich ist und vergessen dabei, dass man von Anfang an Programmierparadigmen wie die Trennung der Zuständigkeiten einhalten sollte.
- Der script-Bereich befindet sich innerhalb des svg-Fragments, was eigentlich möglich ist.
- JavaScript darf Sonderzeichen enthalten, die in XML-Dokumenten nicht erlaubt sind.
Deshalb muss script innerhalb des SVG-Dokuments in CDATA gekapselt werden.
In HTML ist dies nicht nötig. - Evtl. enthält die Webseite weitere Scripte in einem Script-Bereich im Head
- JavaScript darf Sonderzeichen enthalten, die in XML-Dokumenten nicht erlaubt sind.
- Es scheint kürzer und einfacher zu sein, Event-Attribute zu verwenden. Sie haben aber viele Nachteile.
- Verwenden Sie addEventListener, um Event-Handler dynamisch an SVG-Elemente anzuhängen.
- Der Inhalt trennt sich dabei in …
- HTML für die „normale“ Webseite mit Menü, Formularen und Text
- SVG für grafische Inhalte wie Diagramme und Infografiken
- CSS legt fest, wie es dargestellt werden soll (Formatierung & Gestaltung)
- JavaScript legt fest, was passieren soll. (Interaktionen, Animationen)
Osterei erstellen und als SVG abspeichern
…
Mehr im Blog: Ostereier selbst herstellen und mitnehmen
Quellen
- ↑ MDN: SVG as an Image: Restrictions
- ↑ selfhtml.forum: Per Script aus SVG-Datei ein Element verändern.
meldung()
aufgerufen, die mit einemalert()
bestätigt, dass der Kreis angeklickt wurde.