Animation mit Lottie

Avatar of Idorenyin Udoh
Idorenyin Udoh am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Ich glaube, Animationen im Web machen nicht nur Spaß, sondern sind auch so fesselnd, dass sie Website-Besucher zu Kunden gemacht haben. Denken Sie an den „Gefällt mir“-Button auf Twitter. Wenn Sie einen Tweet „liken“, verteilen sich winzige bunte Blasen um den Herz-Button, während er sich zu einem Kreis um den Button zu verwandeln scheint, bevor er in den endgültigen „gelikten“ Zustand übergeht, eine rote Füllung. Es wäre viel weniger aufregend, wenn das Herz einfach von einem Umriss zu einer Füllung wechseln würde. Diese Aufregung und Zufriedenheit ist ein perfektes Beispiel dafür, wie Animationen zur Verbesserung des Benutzererlebnisses eingesetzt werden können.

Dieser Artikel stellt das Konzept vor, Adobe After Effects-Animationen mit Lottie im Web darzustellen, was fortgeschrittene Animationen – wie diesen Twitter-Button – erreichbar machen kann.

Bodymovin ist ein Plugin für Adobe After Effects, das Animationen als JSON exportiert, und Lottie ist die Bibliothek, die sie nativ auf Mobilgeräten und im Web wiedergibt. Sie wurde von Hernan Torrisi entwickelt. Wenn Sie denken: „Oh, ich benutze kein After Effects, dieser Artikel ist wahrscheinlich nichts für mich“, dann warten Sie einen Moment. Ich benutze auch kein After Effects, aber ich habe Lottie in einem Projekt verwendet.

Sie müssen natürlich nicht Lottie verwenden, um Animationen im Web zu erstellen. Eine Alternative ist, Animationen von Grund auf neu zu gestalten. Das kann jedoch zeitaufwändig sein, insbesondere für die komplexen Animationstypen, für die Lottie gut geeignet ist. Eine weitere Alternative sind GIF-Animationen, die bei der Art der Animationen, die sie anzeigen können, unbegrenzt sind, aber typischerweise doppelt so groß sind wie die JSON-Dateien, die Bodymovin erstellt.

Lassen Sie uns also loslegen und sehen, wie es funktioniert.

Das JSON erhalten

Um Lottie zu verwenden, benötigen wir eine JSON-Datei, die die Animation aus After Effects enthält. Glücklicherweise hat Icons8 viele kostenlose animierte Icons hier in den Formaten JSON, GIF und After Effects.

Das Skript zu HTML hinzufügen

Wir müssen auch die JavaScript-Bibliothek des Bodymovin-Players in unser HTML aufnehmen und ihre loadAnimation()-Methode aufrufen. Die Grundlagen werden hier demonstriert.

<div id="icon-container"></div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/bodymovin/5.7.4/lottie.min.js">

<script>
  var animation = bodymovin.loadAnimation({
  // animationData: { /* ... */ },
  container: document.getElementById('icon-container'), // required
  path: 'data.json', // required
  renderer: 'svg', // required
  loop: true, // optional
  autoplay: true, // optional
  name: "Demo Animation", // optional
});
</script>

Die Animation aktivieren

Nachdem die Animation im Container geladen wurde, können wir sie so konfigurieren, wie wir sie aktiviert haben möchten und welche Aktion sie auslösen soll, mit Event-Listenern. Hier sind die Eigenschaften, mit denen wir arbeiten können.

  • container: das DOM-Element, in das die Animation geladen wird.
  • path: der relative Pfad der JSON-Datei, die die Animation enthält.
  • renderer: das Format der Animation, einschließlich SVG, Canvas und HTML.
  • loop: Boolean, um anzugeben, ob die Animation wiederholt werden soll oder nicht.
  • autoplay: Boolean, um anzugeben, ob die Animation sofort nach dem Laden abgespielt werden soll.
  • name: Animationsname für zukünftige Referenzierung.

Beachten Sie im früheren Beispiel, dass die Eigenschaft animationData auskommentiert ist. Sie ist mit der Eigenschaft path wechselseitig exklusiv und ein Objekt, das die exportierten Animationsdaten enthält.

Probieren wir ein Beispiel aus

Ich möchte demonstrieren, wie Lottie mit diesem animierten Play/Pause-Steuerungs-Icon von Icons8 verwendet wird.

Die Bodymovin-Player-Bibliothek wird hier statisch gehostet und kann auf diese Weise in das HTML eingebunden werden, aber sie ist auch als Paket verfügbar.

npm install lottie-web ### or yarn add lottie-web

Und dann, in Ihrer HTML-Datei, fügen Sie das Skript aus dem dist-Ordner des installierten Pakets ein. Sie könnten die Bibliothek auch als Modul von Skypack importieren.

import lottieWeb from "https://cdn.skypack.dev/lottie-web";

Vorerst ist unser Pausen-Button in einer Schleife und spielt auch automatisch.

Ändern wir das, sodass die Animation durch eine Aktion ausgelöst wird.

Animation bei einem Trigger

Wenn wir autoplay ausschalten, erhalten wir ein statisches Pause-Symbol, da es so aus After Effects exportiert wurde.

Aber keine Sorge! Lottie bietet einige Methoden, die auf Animationsinstanzen angewendet werden können. Dazu ist tdie Dokumentation des npm-Pakets umfassender.

Wir müssen hier ein paar Dinge tun.

  • Dass es anfänglich als „Play“-Zustand angezeigt wird.
  • Auf Klick in den „Pause“-Zustand animieren.
  • Zwischen beiden bei nachfolgenden Klicks animieren.

Die Methode goToAndStop(value, isFrame) ist hierfür geeignet. Wenn die Animation im Container geladen wurde, setzt diese Methode die Animation auf den angegebenen Wert und stoppt dort. In dieser Situation müssten wir den Animationswert finden, wenn er sich im Play-Zustand befindet, und ihn einstellen. Der zweite Parameter gibt an, ob der angegebene Wert zeit- oder bildbasiert ist. Es ist ein Boolean-Typ und der Standard ist false (d. h. zeitbasierter Wert). Da wir die Animation auf den Play-Frame setzen wollen, setzen wir ihn auf true.

Ein zeitbasierter Wert setzt die Animation auf einen bestimmten Punkt in der Zeitleiste. Zum Beispiel ist der Zeitwert am Anfang der Animation, wenn sie pausiert, 1. Ein bildbasierter Wert setzt die Animation jedoch auf einen bestimmten Bildwert. Ein Frame ist laut TechTerms ein einzelnes Bild in einer Bildsequenz. Wenn ich also den Frame-Wert der Animation auf 5 setze, springt die Animation zum fünften Frame der Animation (der „Bildsequenz“ in diesem Fall).

Nachdem ich verschiedene Werte ausprobiert habe, habe ich festgestellt, dass die Animation von den Frame-Werten 11 bis 16 spielt. Daher habe ich 14 gewählt, um auf der sicheren Seite zu sein.

Nun müssen wir die Animation so einstellen, dass sie beim Klicken des Benutzers auf Pause wechselt und beim erneuten Klicken des Benutzers auf Play. Als Nächstes benötigen wir die Methode playSegments(segments, forceFlag). Der Parameter segments ist ein Array mit zwei Zahlen. Die erste und zweite Zahl geben den ersten und letzten Frame an, den die Methode lesen soll. forceFlag ist ein Boolean, der angibt, ob die Methode sofort ausgeführt werden soll oder nicht. Wenn er auf false gesetzt ist, wartet er, bis die Animation zu dem Wert abgespielt wurde, der als erster Frame im segments-Array angegeben ist, bevor er ausgelöst wird. Wenn er auf true gesetzt ist, werden die Segmente sofort abgespielt.

Hier habe ich ein Flag erstellt, das anzeigt, wann die Segmente von Play zu Pause und von Pause zu Play abgespielt werden sollen. Ich habe auch den forceFlag-Boolean auf true gesetzt, da ich einen sofortigen Übergang wünsche.

Da haben wir es! Wir haben eine Animation von After Effects im Browser gerendert! Danke Lottie!

Canvas?

Ich bevorzuge SVG als Renderer, da es Skalierung unterstützt und meiner Meinung nach die schärfsten Animationen rendert. Canvas rendert nicht ganz so gut und unterstützt auch keine Skalierung. Wenn Sie jedoch ein vorhandenes Canvas verwenden möchten, um eine Animation zu rendern, müssen Sie einige zusätzliche Dinge tun.

Mehr tun

Animationsinstanzen haben auch Ereignisse, die ebenfalls verwendet werden können, um zu konfigurieren, wie die Animation reagieren soll.

Zum Beispiel habe ich im folgenden Pen zwei Event-Listener zur Animation hinzugefügt und Text eingefügt, der angezeigt werden soll, wenn die Events ausgelöst werden.

Alle Events sind in den Docs des npm-Pakets verfügbar. Damit sage ich: Gehen Sie hinaus und rendern Sie einige erstaunliche Animationen!