Útil biblioteca de animaciones de confetti para frontend
(github.com/catdad)-
Cómo instalar
- Se puede instalar como módulo mediante NPM
npm install --save canvas-confetti - Se puede usar en el proyecto con
require('canvas-confetti') - Como es un componente del cliente, no funciona en Node. Hay que compilar el proyecto usando webpack o algo similar
- Se puede incluir directamente en una página HTML mediante CDN
<script src="https://cdn.jsdelivr.net/npm/canvas-confetti@1.9.2/…; - Al incluirlo en un proyecto, se recomienda usar la versión más reciente desde la página de releases
- Se puede instalar como módulo mediante NPM
-
Modo de reducción de animaciones
- Algunas personas usuarias prefieren evitar el movimiento, así que hay que tenerlo en cuenta
- Con la opción
disableForReducedMotionse puede considerar a quienes no quieren animaciones que resulten molestas o confusas - Está desactivado por defecto, pero se planea cambiar ese valor predeterminado en un próximo major release
API
-
confetti([options {Object}])→Promise|null- Recibe un único objeto de opciones como parámetro
- Si
window.Promiseestá disponible, devuelve un Promise; si no lo está (por ejemplo, en IE), devuelvenull - Es posible proporcionar una implementación de Promise mediante un polyfill o con
confetti.Promise - Si se llama a
confettivarias veces antes de que termine, devuelve el mismo Promise. Internamente reutiliza el mismo elemento canvas - Cuando todas las animaciones terminan, se resuelve el Promise devuelto en cada llamada
- Principales propiedades del objeto
optionsparticleCount,angle,spread,startVelocity,decay,gravity,drift,ticks,origin,colors,shapes,scalar,zIndex, etc.
-
confetti.shapeFromPath({ path, matrix? })→Shape- Crea una forma de confetti personalizada usando una cadena SVG Path
- Solo admite color sólido y el soporte para stroke no está implementado
- Requiere una matriz de transformación. Se puede pasar directamente o calcular con un helper
- Está limitado a navegadores que soporten
Path2D - Devuelve un objeto
Shape
-
confetti.shapeFromText({ text, scalar?, color?, fontFamily? })→Shape- Función para renderizar confetti con emoji
- Se recomienda usar un solo carácter, especialmente un emoji
- Como rasteriza el texto, no es adecuado redimensionarlo después de crearlo
- Si se ajusta el tamaño con
scalar, aquí también hay que usar el mismo valor - Opciones:
text,scalar,color,fontFamily
-
confetti.create(canvas, [globalOptions])→function- Crea una instancia de la función
confettique usa un canvas personalizado - Permite limitar el tamaño del canvas
- Opciones globales
resize: establece el tamaño de imagen del canvas y si debe mantenerse al cambiar el tamaño de la ventanauseWorker: indica si se debe usar un Web Worker asíncrono para renderizar cuando sea posibledisableForReducedMotion: si se debe desactivar por completo el confetti para quienes usan modo de reducción de animaciones
- Consideraciones al usar
useWorker: true- No se debe manipular el canvas directamente. El control se transfiere al Web Worker
- Crea una instancia de la función
-
confetti.reset()- Detiene la animación y elimina todo el confetti
- Resuelve de inmediato los Promise pendientes
- Las instancias creadas con
confetti.createtienen su propio métodoreset
Ejemplos de uso
-
Uso básico
confetti(); -
Usar una gran cantidad de confetti
confetti({ particleCount: 150 }); -
Esparcirlo ampliamente
confetti({ spread: 180 }); -
Lanzar una pequeña cantidad desde una posición aleatoria
confetti({ particleCount: 100, startVelocity: 30, spread: 360, origin: { x: Math.random(), y: Math.random() - 0.2 } }); -
Lanzamiento continuo desde varias direcciones durante 30 segundos
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); } }());
Opinión de GN⁺
-
canvas-confettiparece ser una biblioteca ligera que permite aplicar fácilmente efectos de confetti en páginas web. Soporta tanto instalación por NPM como vía CDN, lo que parece ofrecer una buena comodidad para desarrolladores. -
Soporta una gran variedad de configuraciones para el efecto de confetti, por lo que ofrece bastante flexibilidad. Se pueden ajustar libremente la cantidad de confetti, el nivel de dispersión, el tamaño, la forma y los colores para lograr distintos ambientes.
-
Es interesante que también permita crear confetti con formas personalizadas usando texto o rutas SVG. En particular, la idea de usar emoji como confetti parece divertida.
-
También parece una ventaja que pueda ejecutar la animación usando Web Worker sin bloquear el hilo principal. Eso sí, en ese caso ya no es posible controlar el canvas directamente, así que hay un trade-off.
-
Desde la perspectiva de accesibilidad web, es positivo que soporte un modo de reducción de animaciones para considerar a personas sensibles al movimiento. Conviene tomar nota de que en versiones futuras este modo estará activado por defecto.
-
En general, parece una biblioteca fácil de usar y con muchas opciones. Podría ser adecuada para páginas de celebración o juegos donde se quiera transmitir una atmósfera animada. Aun así, un uso excesivo podría perjudicar la experiencia de usuario, por lo que parece recomendable usarla con moderación.
1 comentarios
Opiniones de Hacker News