Scripting
Es gibt mehrere Möglichkeiten, SVG mit JavaScript zu erstellen und zu manipulieren. Dieses Dokument beschreibt die Ereignisbehandlung, Interaktivität und das Arbeiten mit eingebetteten SVG-Inhalten.
Man kann das Standardverhalten des Browsers mit der Methode evt.preventDefault()
überschreiben, Ereignislistener mit der Syntax element.addEventListener(event, function, useCapture)
zu Objekten hinzufügen und Eigenschaften von Elementen mit einer Syntax wie svgElement.style.setProperty("fill-opacity", "0.0", "")
festlegen. Beachten Sie, dass alle drei Argumente beim Festlegen von Eigenschaften existieren.
Verhindern des Standardverhaltens im Ereigniscode
Beim Schreiben von Drag-and-Drop-Code passiert es manchmal, dass Text auf der Seite versehentlich ausgewählt wird, während man zieht. Oder wenn Sie die Rücktaste in Ihrem Code verwenden möchten, möchten Sie das Standardverhalten des Browsers überschreiben, das beim Drücken der Rücktaste darin besteht, zur vorherigen Seite zurückzukehren. Die Methode evt.preventDefault()
ermöglicht Ihnen dies.
Verwendung von eventListeners
mit Objekten
Die Methoden addEventListener()
und removeEventListener()
sind sehr nützlich beim Schreiben von interaktiven SVG. Sie können ein Objekt, das die handleEvent
Schnittstelle implementiert, als zweiten Parameter an diese Methoden übergeben.
function myRect(x, y, w, h, message) {
this.message = message;
this.rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
this.rect.setAttributeNS(null, "x", x);
this.rect.setAttributeNS(null, "y", y);
this.rect.setAttributeNS(null, "width", w);
this.rect.setAttributeNS(null, "height", h);
document.documentElement.appendChild(this.rect);
this.rect.addEventListener("click", this, false);
this.handleEvent = (evt) => {
switch (evt.type) {
case "click":
alert(this.message);
break;
}
};
}
Inter-Dokument-Scripting: Referenzierung eingebetteter SVG
Bei der Verwendung von SVG innerhalb von HTML enthält Adobe's SVG Viewer 3.0 automatisch eine Fenster-Eigenschaft namens svgDocument
, die auf das SVG-Dokument zeigt. Dies ist jedoch nicht der Fall bei Mozillas nativer SVG-Implementierung; daher funktioniert window.svgDocument
nicht in Mozilla. Stattdessen können Sie
const svgDoc = document.embeds["name_of_svg"].getSVGDocument();
verwenden, um eine Referenz zu einem eingebetteten SVG-Dokument zu erhalten.
Der beste Weg, um Zugriff auf das Document
zu erhalten, das ein SVG-Dokument darstellt, besteht darin, HTMLIFrameElement.contentDocument
zu betrachten (wenn das Dokument in einem <iframe>
präsentiert wird) oder HTMLObjectElement.contentDocument
(wenn das Dokument in einem <object>
Element präsentiert wird), wie folgt:
const svgDoc = document.getElementById("iframe_element").contentDocument;
Zusätzlich bieten die <iframe>
, <embed>
und <object>
Elemente eine Methode, getSVGDocument()
, die das XMLDocument
zurückgibt, das das eingebettete SVG des Elements darstellt, oder null
, wenn das Element kein SVG-Dokument darstellt.
Sie können auch document.getElementById("svg_elem_name").getSVGDocument()
verwenden, was das gleiche Ergebnis liefert.
Hinweis:
Möglicherweise finden Sie Dokumentationen, die auf eine SVGDocument
Schnittstelle verweisen. Vor SVG 2 wurden SVG-Dokumente mit dieser Schnittstelle dargestellt. SVG-Dokumente werden jedoch jetzt durch die XMLDocument
Schnittstelle dargestellt.
Inter-Dokument-Scripting: Aufrufen von JavaScript-Funktionen
Beim Aufrufen einer JavaScript-Funktion, die in der HTML-Datei von einer SVG-Datei aus eingebettet ist, sollten Sie parent.functionName()
verwenden, um auf die Funktion zu verweisen. Obwohl das Adobe SVG Viewer Plugin die Verwendung von functionName()
erlaubt, ist dies nicht die bevorzugte Vorgehensweise.
Hinweis:
Laut dem SVG wiki ist die "parent"
JS-Variable im Vorschau-Plugin von Adobe SVG Version 6 fehlerhaft. Der empfohlene Workaround besteht darin, "top"
anstelle von "parent"
zu verwenden. Da es sich um eine Beta-Version ihres Plugins handelt, können wir dies wahrscheinlich sicher ignorieren.
Weitere Informationen und einige Beispiele finden Sie auf der SVG wiki Inter-Dokument-Scripting-Seite.
setProperty
hat drei Parameter
Die Funktion svgElement.style.setProperty("fill-opacity", "0.0")
löst eine DOMException - SYNTAX ERR
in Mozilla aus. Dieses Verhalten ist in der DOM Level 2 Style Specification des W3C festgelegt. Die Funktion setProperty
ist als Funktion mit drei Parametern definiert. Das obige Beispiel kann durch 'svgElement.style.setProperty("fill-opacity", "0.0", "")'
ersetzt werden, das den Standards entspricht.