SVG oder Skalierbare Vektorgrafiken, ist eine Markup-gesteuerte Vektor-Grafik-Rendering-Engine im XML-Stil für den Browser. SVG wird in allen Browsern außer IE unterstützt < v9 and Android < v3. The same support is available for canvas (except canvas goes all the way back on Android), so the question often surfaces: which one should you use?
Heute werden wir SVG untersuchen und erklären, warum die Frage "Welche sollte ich verwenden?" wird normalerweise mit "was versuche ich zu tun?" beantwortet. Um eine vollständige Liste der Elemente zu erhalten, aus denen SVG besteht, lesen Sie Mozillas Dokumente zu diesem Thema. Dort können Sie auch die SVG-DOM-API sehen.
Wir werden zunächst einige einzigartige Vorteile von SVG aufzeigen. Anstatt alle 80 SVG-Knotentypen zu überprüfen, wird erläutert, wie Illustrator ein SVG-Dokument schnell in eine Webseite einbinden kann. Wir werden auch einen Blick auf D3.js werfen, eine mächtige JavaScript-Bibliothek zur SVG-Manipulation.
Msgstr "SVG soll nicht zur Pixelmanipulation verwendet werden."
SVG hat für bestimmte Anwendungen einige Vorteile gegenüber Bildern oder auf Leinwand basierenden Renderings. SVG soll nicht zur Pixelmanipulation verwendet werden. Es kann jedoch sehr gut mit Vektorgrafiken und programmatischer Vektorbearbeitung umgehen.
Falls Sie noch nichts gehört haben, ist die Unabhängigkeit von Auflösungen und Browser-Agnostizismus heutzutage ein heißes Thema in der Front-End-Entwicklung (denken Sie an "responsive design"). Die meisten Lösungen, die zur Behebung auflösungsbasierter Probleme (z. B. für Retina-Bildschirme) vorhanden sind, umfassen entweder eine große Menge unnötiger Daten (hochauflösendes Bildersetzung) oder Kompromisse für den einen oder den anderen Browser (sogar alle Auflösungen) Wenn der Bildschirm den Unterschied nicht anzeigt). Daher verlassen wir uns auf die Geschwindigkeit des Datenengpasses bei der Download-Geschwindigkeit, um Bilder mit höherer Auflösung auf Geräte zu übertragen, die sich häufig in drahtlosen Datennetzen befinden. Nicht ideal.
"SVG bietet eine Möglichkeit, grafische Elemente mit voller Auflösung zu erstellen, unabhängig von der Bildschirmgröße, der Zoomstufe oder der Auflösung, die das Gerät des Benutzers hat."
SVG bietet eine Möglichkeit, grafische Elemente mit voller Auflösung zu erstellen, unabhängig von der Bildschirmgröße, der Zoomstufe oder der Auflösung des Geräts Ihres Benutzers. Dies ist etwas, was wir bis SVG nur mit cleverem Element-Styling über CSS und Text-Rendering gesehen haben. Die Verwendung von divs und: after-Elementen zum Erstellen einfacher Formen und anderer Effekte ist mit SVG nicht erforderlich. Stattdessen können Sie Vektorformen aller Art erstellen.
Also schreibst du HTML? JavaScript? CSS? Gut. Dann wissen Sie schon viel über das, was Sie wissen müssen, um SVG zu schreiben. SVG verwendet tatsächlich ein XML-kompatibles Format, um seine Rendering-Shapes zu definieren. Darüber hinaus können Sie tatsächlich Formen in CSS gestalten und mit JavaScript interaktiv gestalten. Es gibt mehrere JS-Bibliotheken, die Sie in dieser Welt unterstützen, wie D3.js und Raphael. Hier ist ein Beispiel einer SVG-Elementgruppe (das Envato-Blatt). Sie können dieses Beispiel auch auf JSFiddle anzeigen.
Auf die DOM-Knoten-basierte API von SVG kann bereits mehr zugegriffen werden als auf die clientseitige Nur-Canvas-API. Mit dieser Konstruktion können Sie:
Die DOM-API bietet weitere klare Vorteile für die Verwendung von SVG.
Wenn Sie Bilder in einem HTML-Dokument mit der Mit diesem Tag definieren Sie eine Datei, die der Browser des Benutzers verwenden wird anfordern. Diese Anforderung nimmt viel Bandbreite in Anspruch und erfordert mehr Zeit zum Herunterladen. Wenn Ihr Image stattdessen aus Dom-Knoten besteht, werden diese zusätzlichen HTTP-Anforderungen abgeschnitten, wodurch Ihre Website schneller und benutzerfreundlicher wird.
Trotz der Browser-Kriege bietet die DOM-API über alle Browser hinweg ein hohes Maß an Flexibilität in Bezug auf die Skript-Interaktivität, die sich auf SVG-Elemente erstreckt. Das Styling von SVG erfolgt über CSS. Da Browser-Ereignis-APIs für SVG-Elemente verfügbar sind, ist das Scripting von interaktivem Verhalten ein Kinderspiel. Fügen Sie einfach einen Handler an einen bestimmten Knoten des SVG-Elements an, und Sie sind festgelegt.
Dies gilt nicht für Elemente, die auf die Leinwand gezeichnet werden. Da es sich bei der Leinwand nur um eine Pixel-Rendering-Engine handelt, werden die gezeichneten Elemente nicht als Objekte im Speicher gehalten. Das Skript hat die Aufgabe, diese Elemente gesammelt zu halten und alle relevanten Positions- und Größeninformationen zu überwachen, um Ereignisse in einer Ereignisschleife zu suchen und auszulösen. Darüber hinaus müsste die Z-Indizierung auch vom Skript übernommen werden.
Schauen wir uns ein Beispiel an. Angenommen, Sie möchten den Mauszeiger über einem Kreis in der Leinwand erkennen. Hinweis: Wir sagen nur, dass die Leinwand die gesamte Breite des Browserfensters hat, und wir verwenden jQuery, um das Beispiel kurz zu halten.
var circleCenter = [200, 300], Radius = 50; $ (window) .on ("mousemove", Funktion (e) var mx = e.pageX, mein = e.pageY; if (mx> circleCenter [0] - radius && mx < circleCenter[0] + radius && my > circleCenter [1] - Radius && mein < circleCenter[1] + radius) // now we are hovering );
Dies ist zwar nicht unbedingt ein schwieriges oder ungewöhnliches Codemuster, aber wenn Sie an die Browser-API gewöhnt sind, scheint es ein frustrierender Prozess zu sein, nur um nach Hover zu suchen. Dies ist ein sehr verbreitetes Muster in anderen untergeordneten Schnittstellen-Programmier-Engines wie Unity3D oder Processing. In der Web-Welt stehen uns jedoch Werkzeuge zur Verfügung, die bereits viele gemeinsame interaktive Ziele erfüllen, die wir möglicherweise haben. Sie könnten eine Reihe von Komfortfunktionen für allgemeine Aufgaben schreiben, aber würden Sie nicht lieber zum Punkt kommen? Im Gegensatz dazu können wir die Einfachheit der gleichen Aufgabe mit SVG erkennen.
$ ("svg path # circle"). on ("hover", function (event) // Das ist alles.);
Dies ist für Entwickler eindeutig viel zeiteffizienter und erstellt einfache Interaktivität.
Es gibt eine Menge JavaScript-Bibliotheken für Canvas (wie KineticJS, mit denen Sie ziemlich tolle Sachen machen können. Aber wenn Sie wie ich sind, verwenden Sie in Ihren Webanwendungen keine vollständigen Physik-Engines. Stattdessen ich Meist brauche ich skalierbare Symbole, interaktive Grafiken und detaillierte, ästhetisch ansprechende Präsentationsmöglichkeiten für meine Benutzer. Die meisten der von mir benötigten Physiken sind einfache Beschleunigungsgleichungen. Diese grafischen Elemente lassen sich leicht mit SVG erstellen und eine Vielzahl einfacher Physik Gleichungen werden wahrscheinlich den Rest meiner Bedürfnisse abdecken. Schauen wir uns ein paar praktische Anwendungen für SVG an.
Nachdem wir uns nun einige der Vorteile von SVG angesehen haben, wollen wir untersuchen, warum sich viele Entwickler weiterhin für SVG entscheiden. Es gibt zwei Hauptgründe, warum SVG nicht von vielen Entwicklern verwendet wird.
Natürlich möchte niemand wirklich die Punkte im SVG-XML bearbeiten. Zum Glück muss niemand! Dies ist der Teil, den die Leute oft nicht erkennen. Es gibt Werkzeuge zum Bearbeiten von SVG-Dateien, sodass Sie dies nicht immer von Hand tun müssen.
Wenn Sie einen Vektoreditor besitzen, kann er Ihre Datei höchstwahrscheinlich als SVG-Datei speichern. Probieren Sie es aus. Öffnen Sie Illustrator, zeichnen Sie einen Kreis oder zwei, und speichern Sie die Datei als SVG. Öffnen Sie dann diese Datei in Sublime Text oder einem anderen Texteditor. Sie werden sofort sehen, dass das SVG-XML - abgesehen von zusätzlichen Metadaten - direkt in Ihre HTML-Datei eingefügt werden kann. Sie werden höchstwahrscheinlich sehen
(Gruppe),
(Pfad) und natürlich (die übergeordneten SVG-Elemente).
Sie können Ihr SVG-XML zwar direkt in eine HTML-Datei ablegen. Was ist, wenn Sie möchten, dass das SVG dynamisch erstellt wird? D3.js ist "eine JavaScript-Bibliothek zur Bearbeitung von Dokumenten, die auf Daten basieren". Mit anderen Worten, es ist großartig, um SVG-Elemente wie Balkendiagramme und Liniendiagramme basierend auf einem Datensatz zu generieren. Wir haben uns entschieden, D3 zu zeigen, weil das Vokabular der SVG-Implementierung im Browser entspricht. Beachten Sie, dass es andere große SVG-Bibliotheken gibt (insbesondere Raphael.js)..
Obwohl D3.js mehr als nur SVG-Manipulationen ausführt, werden wir es der Kürze halber für heute verwenden. (Schauen Sie sich die Beispiele auf der offiziellen Website von D3.js an und sehen Sie sich diesen Workshop an, den Mike auf seiner persönlichen Website gepostet hat.)
In diesem ersten Beispiel erstellen wir einfach einen pulsierenden Kreis, indem Sie Math.sin und einen Iterator mit setInterval verwenden. Pulsierender Kreis
In diesem Beispiel aktualisieren wir ein gezeichnetes Liniendiagramm mit einigen Zufallswerten. Liniendiagramm
SVG wird viele Ihrer Anforderungen für das Rendering von Bildern im Browser erfüllen. Obwohl es viele Gründe gibt, SVG zu verwenden, wie bei etwas Großartigem, gibt es Dinge, die es nicht gut macht.
Hier sind ein paar hilfreiche Links, um Sie weiter in SVG zu verankern!
Welche andere Verwendung haben Sie für SVG gefunden? Sagen Sie uns im Kommentarbereich Bescheid und vielen Dank für das Lesen.