Une bibliothèque d’animation de confettis frontend utile
(github.com/catdad)-
Méthodes d’installation
- Installation possible comme module via NPM
npm install --save canvas-confetti - Utilisable dans un projet avec
require('canvas-confetti') - Comme il s’agit d’un composant côté client, cela ne fonctionne pas dans Node. Il faut builder le projet avec webpack ou équivalent
- Peut être inclus directement dans une page HTML via un CDN
<script src="https://cdn.jsdelivr.net/npm/canvas-confetti@1.9.2/…; - Lors de l’intégration au projet, il est recommandé d’utiliser la dernière version depuis la page des releases
- Installation possible comme module via NPM
-
Mode de réduction des animations
- Certains utilisateurs n’apprécient pas les animations, il faut donc en tenir compte
- L’option
disableForReducedMotionpermet de prendre en compte les utilisateurs qui ne souhaitent pas d’animations perturbantes - Désactivé par défaut pour le moment, mais la valeur par défaut devrait changer dans une prochaine major release
API
-
confetti([options {Object}])→Promise|null- Prend un seul objet d’options en paramètre
- Retourne une Promise si
window.Promiseest disponible, sinon retournenull(par exemple sur IE) - Il est possible de fournir une implémentation de Promise via un polyfill ou
confetti.Promise - Si
confettiest appelé plusieurs fois avant la fin, la même Promise est renvoyée. Le même élément canvas est réutilisé en interne - Quand toutes les animations sont terminées, la Promise renvoyée par chaque appel est résolue
- Principales propriétés de l’objet
optionsparticleCount,angle,spread,startVelocity,decay,gravity,drift,ticks,origin,colors,shapes,scalar,zIndexetc.
-
confetti.shapeFromPath({ path, matrix? })→Shape- Crée une forme de confetti personnalisée à partir d’une chaîne SVG Path
- Seule la couleur unie est prise en charge, le Stroke n’est pas implémenté
- Une matrice de transformation est nécessaire. Elle peut être fournie directement ou calculée avec un helper
- Limité aux navigateurs prenant en charge
Path2D - Retourne un objet
Shape
-
confetti.shapeFromText({ text, scalar?, color?, fontFamily? })→Shape- Fonction pour le rendu de confettis en emoji
- Il est recommandé d’utiliser un seul caractère, en particulier un emoji
- Le texte étant rastérisé, il ne convient pas bien à un redimensionnement après création
- En cas de redimensionnement avec
scalar, il faut utiliser ici la même valeur - Options
text,scalar,color,fontFamily
-
confetti.create(canvas, [globalOptions])→function- Crée une instance de la fonction
confettiutilisant un canvas personnalisé - Permet de limiter la taille du canvas
- Options globales
resize: définit la taille de l’image du canvas et indique si elle doit être conservée lors du redimensionnement de la fenêtreuseWorker: indique s’il faut utiliser un Web Worker asynchrone pour le rendu lorsque c’est possibledisableForReducedMotion: indique s’il faut désactiver complètement les confettis pour les utilisateurs en mode de réduction des animations
- Points d’attention avec
useWorker: true- Il ne faut pas manipuler directement le canvas. Le contrôle est transféré au Web Worker
- Crée une instance de la fonction
-
confetti.reset()- Arrête l’animation et supprime tous les confettis
- Résout immédiatement les Promises encore en attente
- Les instances créées avec
confetti.createdisposent de leur propre méthodereset
Exemples d’utilisation
-
Utilisation de base
confetti(); -
Utiliser beaucoup de confettis
confetti({ particleCount: 150 }); -
Les disperser largement
confetti({ spread: 180 }); -
Petit tir depuis une position aléatoire
confetti({ particleCount: 100, startVelocity: 30, spread: 360, origin: { x: Math.random(), y: Math.random() - 0.2 } }); -
Tir continu depuis plusieurs directions pendant 30 secondes
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); } }());
Avis de GN⁺
-
canvas-confettisemble être une bibliothèque légère permettant d’appliquer facilement un effet de confettis sur une page web. L’installation via NPM comme via CDN est prise en charge, ce qui paraît très pratique pour les développeurs. -
La bibliothèque prend en charge de nombreux réglages de l’effet de confettis, ce qui lui donne une grande flexibilité. Il semble possible d’ajuster librement le nombre de confettis, leur dispersion, leur taille, leur forme ou encore leurs couleurs pour créer différentes ambiances.
-
Il est intéressant de pouvoir créer aussi des confettis personnalisés à partir de texte ou de chemins SVG. Les confettis utilisant des emoji semblent être une idée particulièrement amusante.
-
L’utilisation de Web Worker pour exécuter l’animation sans bloquer le thread principal semble également être un avantage. En contrepartie, le contrôle direct du canvas devient impossible.
-
Le support d’un mode de réduction des animations pour les utilisateurs sensibles au mouvement est un point positif du point de vue de l’accessibilité web. Il faut noter que ce mode devrait être activé par défaut dans une future version.
-
Globalement, la bibliothèque semble facile à utiliser et propose de nombreuses options. Elle paraît bien adaptée aux pages de célébration ou aux jeux nécessitant une ambiance légère et festive. Un usage excessif peut toutefois nuire à l’expérience utilisateur, il semble donc préférable de l’utiliser avec modération.
1 commentaires
Avis Hacker News