Manipulieren und Animieren von SVG mit Snap.svg

In diesem Tutorial werden wir Snap.svg vorstellen, eine JavaScript-Bibliothek, die beim Animieren und Bearbeiten von SVG-Inhalten hilft. Um einige der verfügbaren Funktionen zu demonstrieren, werden wir ein SVG-Auge animieren.

Was ist Snap.svg? ?

Snap.svg ist eine JavaScript-Bibliothek, die das Erstellen und Bearbeiten von SVG-Grafiken für moderne Browser erleichtert. Es ist der Nachfolger von Raphaël von Dmitry Baranovskiy; Die beliebteste Javascript-Bibliothek für die Arbeit mit SVG.

Raphäel

Raphäel.js ist eine großartige Bibliothek. Der größte Gewinn, der 2008 veröffentlicht wurde, war die Unterstützung von Browsern ab IE 5.5. Die Unterstützung so vieler Browser war jedoch einschränkend und bedeutete, dass sie die neuesten Entwicklungen nicht implementieren konnte, sondern sich auf eine allgemeine Untermenge von SVG-Funktionen stützte.

Nach einer Weile teilte sich die Raphäel.js-Community in zwei Teile auf, eine Gruppe, die sich auf Cross-Browser-Kompatibilität stützte, und eine andere, die SVGs erstellte. Diese letzte Gruppe verlangte Änderungen, um mehr SVG-Funktionen zu unterstützen, mit denen Raphäel.js nicht umgehen konnte.

Daher wurde Snap.svg erstellt, das von Dmitry Baranovskiy (vom Adobe Web Platform-Team) vollständig von Grund auf neu geschrieben wurde, um einfacher mit SVG zu arbeiten und die neuesten Funktionen von SVG zu nutzen. Funktionen wie Maskierung, Muster, Farbverläufe, Gruppen, Animationen und mehr.

Was können Sie mit Snap.svg machen??

Werfen Sie einen Blick auf die API-Dokumentation und sehen Sie Funktionen wie Maske, Gruppe, Farbverlauf, Filter, Animation und Muster, die Sie auf SVGs anwenden können.

Mit Snap.svg können Sie Grafiken erstellen, es kann jedoch auch mit vorhandener SVG-Datei gearbeitet werden. Das bedeutet, dass Ihre SVG-Inhalte nicht unbedingt mit Snap.svg erstellt werden müssen. Sie können auch Grafiken bearbeiten, die mit Tools wie Adobe Illustrator, Inkscape oder Sketch erstellt wurden.

Erste Schritte mit Snap.svg

Herunterladen 

Zunächst müssen Sie Snap.svg herunterladen. Nachdem dies geschehen ist, finden Sie im Archiv Folgendes:

  • Demos - Hier einige Beispiele, die Sie auch im Demo-Bereich ihrer Website finden können
  • dist - Dies ist das reduzierte und für die Entwicklung dekomprimierte snap.svg-Skript 
  • doc - Hier finden Sie die API-Dokumentation, die auch auf snapsvg.io verfügbar ist
  • src - Dies sind die Komponenten, Tools und Plugins, aus denen Snap.svg besteht, wie Animieren, Papier, Ausführen einer Grunt-Aufgabe usw..
  • Prüfung - Dieses Verzeichnis enthält Komponententests für Snap.svg

Ein Projekt einrichten

Starten Sie nach dem Download der Snap.svg-Ressourcen ein neues Webprojekt, das Folgendes enthalten muss:

  • index.html - die Haupt-HTML-Datei
  • js / snap.svg.js - das snap.svg-Plugin
  • js / main.js - unser Hauptarbeitsbereich

Erstellen Sie eine HTML-Vorlage und referenzieren Sie die Skripts "scripts / snap.svg.js" und "scripts / main.js" irgendwo auf Ihrer Seite. 

Danach platzieren Sie eine  Behälter im Inneren  und gib es ein id. Sie sollten so etwas wie dieses haben:

    Einführung in Snap.svg       

Mit SVG arbeiten

Lassen Sie uns jetzt direkt in die Codierung springen. Um folgen zu können, benötigen Sie etwas Grundkenntnisse und Verständnis für JavaScript, aber es ist nicht wichtig, da wir mit diesem Tutorial nicht zu tief gehen.

Zuerst initialisieren wir Snap und zeigen auf das svg erstellt und einer Variablen zugewiesen. In unserem Fall wird die Variable aufgerufen s

var s = Snap ("# svg");

Von jetzt an innerhalb der s Variable haben wir Zugriff auf alle Snap.svg-Methoden. Angenommen, wir möchten einen Kreis oder ein Rechteck erstellen. 

  • Kreis kann drei Argumente annehmen x,y und Radius (Kreuzen Sie API an)
  • Rechteck kann sechs Argumente annehmen: x, y, Breite, Höhe, horizontaler Radius und vertikaler Radius (Rect-API überprüfen)
  • Ellipse kann vier Argumente annehmen: x, y, horizontaler Radius und vertikaler Radius (Ellipse-API überprüfen)
// Kreis mit 80px Radius var circle = s.circle (90,120,80); // Quadrat mit 160px Seitenbreite var Quadrat = s.rect (210,40,160,160); // Ellipse mit 80px vertikalem Radius und 50px horizontalem Radius var ellipse = s.ellipse (460,120,50,80);

Der obige Code erzeugt das folgende Ergebnis:

Wie Sie dem angefügten Screenshot entnehmen können, haben die Formen standardmäßig ein # 000 (schwarz) Füllfarbe ohne andere Formgebung. Lassen Sie uns mit ihnen interagieren und weitere Stilattribute hinzufügen, wie Füllfarbe, Deckkraft, Strichfarbe, Strichbreite und Deckkraft. Sie können die SVG-Attribute für weitere Details überprüfen.

circle.attr (Füllung: 'Koralle', Strich: 'Koralle', StrokeOpacity: .3, Strichbreite: 10); square.attr (fill: 'lightblue', Strich: 'lightblue', strokeOpacity: .3, strokeWidth: 10); ellipse.attr (fill: 'mediumturquoise', Schlaganfall: 'mediumturquoise', strokeOpacity: .2, strokeWidth: 10);

Diese Attribute haben unsere SVG-Formen viel schöner gemacht!

Weitere SVG-Manipulation

Nehmen wir unser Beispiel und gehen Sie über die Grundlagen hinaus.

Formen gruppieren

Snap.svg verwendet eine mächtige Waffe namens group, die, wie der Name vermuten lässt, Vektoren zu einer Form zusammenfasst. Sie können beliebig viele Formen gruppieren, indem Sie sie als Liste hinzufügen.

Erstellen wir zwei Kreise, gruppieren Sie sie und verringern Sie die Füllung jedes Kreises, um die Vorgänge besser zu visualisieren.

var circle_1 = s.circle (200, 200, 140); var circle_2 = s.circle (150, 200, 140); var Kreise = s.group (Kreis_1, Kreis_2); circle.attr (fill: 'coral', fillOpacity: .6);

Maskieren von Formen mit anderen Formen

Lassen Sie uns nun sagen, dass wir ein imaginäres Auge mit den gruppierten Elementen erstellen möchten, die wir bereits erstellt haben. Wir können dies mit Maske tun. Zuerst müssen wir eine zusätzliche Ellipse erstellen und sie in der Mitte der Gruppe platzieren.

var circle_1 = s.circle (300, 200, 140); var circle_2 = s.circle (250, 200, 140); var Kreise = s.group (Kreis_1, Kreis_2); var ellipse = s.ellipse (275, 220, 170, 90); circle.attr (fill: 'coral', fillOpacity: .6,); ellipse.attr (opacity: .4);



Jetzt müssen wir die Kreise mit unserer Ellipse maskieren und der Ellipse eine andere Füllfarbe hinzufügen:

circle.attr (fill: 'coral', fillOpacity: .6, Maske: Ellipse); ellipse.attr (fill: '#fff', Deckkraft: .8); 

Animieren von Formen

Wenn Sie mit unserem Beispiel fortfahren, können Sie dieses Auge durch Hinzufügen einer animierten Methode zum Blinzeln bringen. Um die soeben erstellte Ellipse zu animieren, ändern wir den vertikalen Radius 1 zu 90 (was der aktuelle Wert ist) und wieder zurück.

Erstellen Sie die Animation und verpacken Sie sie in einer Funktion namens blinken.

function blink () ellipse.animate (ry: 1, 220, function () ellipse.animate (ry: 90, 300);); ;

Dies besagt, dass wir animieren werden ry: 90 zu ry: 1 und von ry: 90 zu ry: 1 zu unterschiedlichen Zeitpunkten.

Erstellen Sie jetzt eine setInterval anrufen blinkeneinmal alle drei Sekunden, um einen Blinkeffekt zu erzeugen.

setInterval (blink, 3000); 

Der endgültige Code sollte folgendermaßen aussehen:

var circle_1 = s.circle (300, 200, 140); var circle_2 = s.circle (250, 200, 140); // Kreise zusammenfassen var circle = s.group (circle_1, circle_2); var ellipse = s.ellipse (275, 220, 170, 90); // Füllfarbe und Deckkraft zum Kreis hinzufügen und // die Maske circle.attr anwenden (fill: 'coral', fillOpacity: .6, mask: ellipse); ellipse.attr (fill: '#fff', Deckkraft: .8); // Erstellen Sie einen Blink-Effekt, indem Sie den RX-Wert ändern. // für Ellipse von 90px auf 1px und zurück blink () ellipse.animate (ry: 1, 220, function () ellipse.animate (ry: 90) , 300);); ; // Blink-Methode alle 3 Sekunden erneut aufrufen setInterval (blink, 3000); 

Browser-Unterstützung

Wie bereits erwähnt, werden diese Funktionen in modernen Browsern unterstützt: IE9+, Safari, Chrome, Firefox und Opera.

Open-Source und kostenlos

Snap.svg ist unter einer Apache 2-Lizenz verfügbar, was bedeutet, dass es vollständig Open Source und völlig kostenlos ist.

Fazit

Snap.svg senkt die Barriere für einige erstaunliche SVG-Manipulationen. Ich hoffe, Ihnen hat es gefallen, mitzumachen und es hat Sie dazu inspiriert, weiter in SVG zu blicken! 

Nützliche Links

  • @snapvg auf Twitter
  • https://github.com/adobe-webplatform/Snap.svg
  • Snapsvg-Forum