Biblioteca útil de animação de confete para frontend
(github.com/catdad)-
Como instalar
- Pode ser instalada como módulo via NPM
npm install --save canvas-confetti - Pode ser usada no projeto com
require('canvas-confetti') - Como é um componente de cliente, não funciona no Node. É preciso fazer o build do projeto com webpack ou equivalente
- Também pode ser incluída diretamente em uma página HTML via CDN
<script src="https://cdn.jsdelivr.net/npm/canvas-confetti@1.9.2/…; - Ao incluir no projeto, é recomendado usar a versão mais recente da página de releases
- Pode ser instalada como módulo via NPM
-
Modo de redução de animação
- Alguns usuários não gostam de movimento, então isso deve ser levado em conta
- Com a opção
disableForReducedMotion, é possível considerar usuários que não querem animações que possam causar desconforto - Vem desativado por padrão, mas o valor padrão deve mudar em uma futura major release
API
-
confetti([options {Object}])→Promise|null- Recebe um único objeto de opções como parâmetro
- Se
window.Promiseestiver disponível, retorna uma Promise; caso contrário (como no IE), retornanull - É possível fornecer uma implementação de Promise via polyfill ou
confetti.Promise - Se
confettifor chamado várias vezes antes de terminar, retorna a mesma Promise. Internamente, o mesmo elemento canvas é reutilizado - Quando todas as animações terminarem, a Promise retornada em cada chamada será resolvida
- Principais propriedades do objeto
optionsparticleCount,angle,spread,startVelocity,decay,gravity,drift,ticks,origin,colors,shapes,scalar,zIndexetc.
-
confetti.shapeFromPath({ path, matrix? })→Shape- Cria formas de confete personalizadas usando uma string SVG Path
- Suporta apenas cor sólida, e Stroke ainda não foi implementado
- Requer uma matriz de transformação. Ela pode ser passada diretamente ou calculada com um helper
- Limitado a navegadores com suporte a
Path2D - Retorna um objeto
Shape
-
confetti.shapeFromText({ text, scalar?, color?, fontFamily? })→Shape- Recurso para renderizar confete com emoji
- É recomendado usar um único caractere, especialmente emoji
- Como o texto é rasterizado, não é adequado redimensionar depois de criado
- Ao ajustar o tamanho com
scalar, é necessário usar o mesmo valor aqui também - Opções:
text,scalar,color,fontFamily
-
confetti.create(canvas, [globalOptions])→function- Cria uma instância da função
confettiusando um canvas personalizado - Permite limitar o tamanho do canvas
- Opções globais
resize: define o tamanho da imagem do canvas e se ele deve ser mantido ao redimensionar a janelauseWorker: define se a renderização deve usar um Web Worker assíncrono quando possíveldisableForReducedMotion: define se o confete deve ser totalmente desativado para usuários com modo de redução de animação
- Cuidados ao usar
useWorker: true- O canvas não deve ser manipulado diretamente. O controle é transferido para o Web Worker
- Cria uma instância da função
-
confetti.reset()- Interrompe a animação e remove todo o confete
- Resolve imediatamente Promises ainda pendentes
- Instâncias criadas com
confetti.createtêm seu próprio métodoreset
Exemplos de uso
-
Uso básico
confetti(); -
Usando muito confete
confetti({ particleCount: 150 }); -
Espalhar bem aberto
confetti({ spread: 180 }); -
Disparar uma pequena quantidade de uma posição aleatória
confetti({ particleCount: 100, startVelocity: 30, spread: 360, origin: { x: Math.random(), y: Math.random() - 0.2 } }); -
Disparar continuamente de várias direções por 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ão do GN⁺
-
canvas-confettiparece ser uma biblioteca leve que permite aplicar facilmente efeitos de confete em páginas web. Como suporta tanto instalação via NPM quanto uso por CDN, parece bastante conveniente para desenvolvedores. -
Ela oferece várias configurações para o efeito de confete, o que lhe dá bastante flexibilidade. É possível ajustar livremente quantidade de confete, dispersão, tamanho, forma, cor etc., permitindo criar diferentes atmosferas.
-
Também é interessante que seja possível criar confetes com formas personalizadas usando texto ou SVG Path. Em especial, a ideia de usar emojis como confete parece divertida.
-
O fato de poder usar Web Worker para executar a animação sem bloquear a thread principal também parece ser uma vantagem. Por outro lado, há o trade-off de não poder controlar o canvas diretamente nesse caso.
-
Do ponto de vista de acessibilidade web, é positivo haver suporte a modo de redução de movimento para considerar usuários sensíveis a animações. Vale observar que, em versões futuras, esse modo deverá vir ativado por padrão.
-
No geral, parece ser uma biblioteca fácil de usar e com várias opções. Deve ser adequada para páginas de comemoração, jogos e outros contextos que peçam uma atmosfera mais descontraída. Ainda assim, usar em excesso pode prejudicar a experiência do usuário, então parece recomendável aplicar com moderação.
1 comentários
Opiniões do Hacker News