Nützliche Frontend-Bibliothek für Confetti-Animationen
(github.com/catdad)-
Installationsmethoden
- Kann über NPM als Modul installiert werden
npm install --save canvas-confetti - Kann im Projekt mit
require('canvas-confetti')verwendet werden - Da es sich um eine Client-Komponente handelt, funktioniert es nicht in Node. Das Projekt muss mit webpack o. Ä. gebaut werden
- Kann über ein CDN direkt in eine HTML-Seite eingebunden werden
<script src="https://cdn.jsdelivr.net/npm/canvas-confetti@1.9.2/…; - Bei Einbindung ins Projekt wird empfohlen, auf der Releases-Seite die neueste Version zu verwenden
- Kann über NPM als Modul installiert werden
-
Modus für reduzierte Animationen
- Einige Nutzer bevorzugen keine Bewegungen, daher sollte dies berücksichtigt werden
- Mit der Option
disableForReducedMotionkann auf Nutzer Rücksicht genommen werden, die keine irritierenden Animationen möchten - Standardmäßig deaktiviert, aber in einem zukünftigen Major Release soll der Standardwert geändert werden
API
-
confetti([options {Object}])→Promise|null- Nimmt ein einzelnes Optionsobjekt als Parameter entgegen
- Gibt ein Promise zurück, wenn
window.Promiseverfügbar ist, andernfalls (z. B. in IE)null - Eine Promise-Implementierung kann per Polyfill oder über
confetti.Promisebereitgestellt werden - Wenn
confettivor Abschluss mehrfach aufgerufen wird, wird dasselbe Promise zurückgegeben. Intern wird dasselbe Canvas-Element wiederverwendet - Sobald alle Animationen abgeschlossen sind, wird das von jedem Aufruf zurückgegebene Promise aufgelöst (resolve)
- Wichtige Eigenschaften des
options-ObjektsparticleCount,angle,spread,startVelocity,decay,gravity,drift,ticks,origin,colors,shapes,scalar,zIndexusw.
-
confetti.shapeFromPath({ path, matrix? })→Shape- Erzeugt benutzerdefinierte Confetti-Formen mit einem SVG-Path-String
- Unterstützt nur Vollfarben, Stroke ist nicht implementiert
- Eine Transformationsmatrix ist erforderlich. Sie kann direkt übergeben oder mit einem Helper berechnet werden
- Auf Browser mit Unterstützung für
Path2Dbeschränkt - Gibt ein
Shape-Objekt zurück
-
confetti.shapeFromText({ text, scalar?, color?, fontFamily? })→Shape- Funktion zum Rendern von Emoji-Confetti
- Empfohlen wird ein einzelnes Zeichen, insbesondere ein Emoji
- Da der Text rasterisiert wird, ist er nach der Erzeugung nicht gut für Größenänderungen geeignet
- Wenn die Größe mit
scalarangepasst wird, muss hier derselbe Wert verwendet werden - Optionen:
text,scalar,color,fontFamily
-
confetti.create(canvas, [globalOptions])→function- Erzeugt eine Instanz der
confetti-Funktion, die ein benutzerdefiniertes Canvas verwendet - Die Größe des Canvas kann begrenzt werden
- Globale Optionen
resize: legt die Canvas-Bildgröße fest und ob sie bei Änderungen der Fenstergröße beibehalten wirduseWorker: ob nach Möglichkeit asynchrone Web Worker zum Rendern verwendet werden sollendisableForReducedMotion: ob Confetti für Nutzer mit reduziertem Animationsmodus vollständig deaktiviert werden soll
- Hinweise bei Verwendung von
useWorker: true- Das Canvas darf nicht direkt manipuliert werden, da die Kontrolle an den Web Worker übertragen wird
- Erzeugt eine Instanz der
-
confetti.reset()- Stoppt die Animation und entfernt sämtliches Confetti
- Nicht aufgelöste Promises werden sofort aufgelöst
- Mit
confetti.createerzeugte Instanzen besitzen eine eigenereset-Methode
Anwendungsbeispiele
-
Grundlegende Verwendung
confetti(); -
Viel Confetti verwenden
confetti({ particleCount: 150 }); -
Weit streuen
confetti({ spread: 180 }); -
Kleine Menge zufällig von zufälliger Position aus starten
confetti({ particleCount: 100, startVelocity: 30, spread: 360, origin: { x: Math.random(), y: Math.random() - 0.2 } }); -
30 Sekunden lang fortlaufend aus mehreren Richtungen starten
var duration = 30 * 1000; var end = Date.now() + duration; (function frame() { confetti({ particleCount: 7, angle: 60, spread: 55, origin: { x: 0 } }); confetti({ particleCount: 7, angle: 120, spread: 55, origin: { x: 1 } }); if (Date.now() < end) { requestAnimationFrame(frame); } }());
Meinung von GN⁺
-
canvas-confettiwirkt wie eine leichtgewichtige Bibliothek, mit der sich Confetti-Effekte einfach auf Webseiten anwenden lassen. Sie unterstützt sowohl die Installation per NPM als auch die Einbindung per CDN, was für Entwickler sehr praktisch ist. -
Die Bibliothek unterstützt zahlreiche Einstellungen für den Confetti-Effekt und ist dadurch sehr flexibel. Anzahl, Streuung, Größe, Form und Farben des Confetti lassen sich frei anpassen, wodurch sich unterschiedliche Stimmungen erzeugen lassen.
-
Interessant ist auch, dass sich mit Text oder SVG-Pfaden benutzerdefinierte Confetti-Formen erstellen lassen. Besonders Confetti mit Emojis ist eine unterhaltsame Idee.
-
Ein weiterer Vorteil ist, dass sich die Animation mithilfe von Web Workern ausführen lässt, ohne den Main Thread zu blockieren. Allerdings gibt es dabei den Trade-off, dass das Canvas nicht mehr direkt gesteuert werden kann.
-
Positiv im Hinblick auf Web Accessibility ist die Unterstützung eines Modus für reduzierte Animationen, um auf Nutzer Rücksicht zu nehmen, die empfindlich auf Bewegung reagieren. In einer zukünftigen Version soll dieser Modus standardmäßig aktiviert werden, was man im Blick behalten sollte.
-
Insgesamt wirkt es wie eine einfach zu verwendende Bibliothek mit vielen Optionen. Sie dürfte sich gut für Glückwunschseiten, Spiele und andere Szenarien eignen, in denen eine lebhafte Atmosphäre gefragt ist. Ein übermäßiger Einsatz kann jedoch die User Experience beeinträchtigen, daher sollte sie mit Maß eingesetzt werden.
1 Kommentare
Hacker-News-Kommentar
confetti.resetti().