Kullanışlı bir frontend confetti animasyon kütüphanesi
(github.com/catdad)-
Kurulum yöntemi
- NPM üzerinden modül olarak kurulabilir
npm install --save canvas-confetti - Projede
require('canvas-confetti')ile kullanılabilir - İstemci bileşeni olduğu için Node'da çalışmaz. Proje webpack vb. ile build edilmelidir
- CDN üzerinden doğrudan HTML sayfasına eklenebilir
<script src="https://cdn.jsdelivr.net/npm/canvas-confetti@1.9.2/…; - Projeye dahil ederken releases sayfasındaki en güncel sürümün kullanılması önerilir
- NPM üzerinden modül olarak kurulabilir
-
Azaltılmış animasyon modu
- Bazı kullanıcılar hareketi tercih etmez, bu yüzden bunun dikkate alınması gerekir
disableForReducedMotionseçeneğiyle dikkat dağıtıcı animasyon istemeyen kullanıcılar gözetilebilir- Varsayılan olarak devre dışıdır, ancak gelecekteki bir major sürümde varsayılan değerin değiştirilmesi planlanmaktadır
API
-
confetti([options {Object}])→Promise|null- Parametre olarak tek bir seçenek nesnesi alır
window.Promisekullanılabiliyorsa Promise döndürür, kullanılamıyorsa (IE vb.)nulldöndürür- Polyfill veya
confetti.Promiseüzerinden bir Promise implementasyonu sağlanabilir - Tamamlanmadan önce
confettibirden çok kez çağrılırsa aynı Promise döndürülür. İçeride aynı canvas öğesi yeniden kullanılır - Tüm animasyonlar tamamlandığında her çağrıdan dönen Promise resolve edilir
optionsnesnesinin başlıca özellikleriparticleCount,angle,spread,startVelocity,decay,gravity,drift,ticks,origin,colors,shapes,scalar,zIndexvb.
-
confetti.shapeFromPath({ path, matrix? })→Shape- SVG Path dizgesi kullanarak özel confetti şekilleri oluşturur
- Yalnızca düz renk desteklenir, Stroke henüz uygulanmamıştır
- Dönüşüm matrisi gerekir. Doğrudan verilebilir veya helper ile hesaplanabilir
Path2Ddestekleyen tarayıcılarla sınırlıdırShapenesnesi döndürür
-
confetti.shapeFromText({ text, scalar?, color?, fontFamily? })→Shape- Emoji confetti render etmek için kullanılan özellik
- Tek karakter, özellikle emoji kullanılması önerilir
- Metin rasterize edildiğinden oluşturulduktan sonra yeniden boyutlandırmaya uygun değildir
scalarile boyutlandırılacaksa burada da aynı değerin kullanılması gerekirtext,scalar,color,fontFamilyseçenekleri
-
confetti.create(canvas, [globalOptions])→function- Özel bir canvas kullanan
confettifonksiyonu örneği oluşturur - Canvas boyutunun sınırlandırılmasını sağlar
- Global seçenekler
resize: canvas görüntü boyutunu ayarlama ve pencere boyutu değiştiğinde bunu korumauseWorker: mümkünse render için asenkron web worker kullanılıp kullanılmayacağıdisableForReducedMotion: azaltılmış animasyon modunu kullanan kullanıcılar için confetti'nin tamamen devre dışı bırakılıp bırakılmayacağı
useWorker: truekullanılırken dikkat edilmesi gerekenler- Canvas doğrudan manipüle edilmemelidir. Kontrol web worker'a aktarılır
- Özel bir canvas kullanan
-
confetti.reset()- Animasyonu durdurur ve tüm confetti'leri kaldırır
- Çözülmemiş Promise'leri hemen resolve eder
confetti.createile oluşturulan örneklerin kendiresetmetodu vardır
Kullanım örnekleri
-
Temel kullanım
confetti(); -
Çok miktarda confetti kullanımı
confetti({ particleCount: 150 }); -
Geniş alana yayma
confetti({ spread: 180 }); -
Rastgele konumdan az miktarda fırlatma
confetti({ particleCount: 100, startVelocity: 30, spread: 360, origin: { x: Math.random(), y: Math.random() - 0.2 } }); -
30 saniye boyunca birden çok yönden art arda fırlatma
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); } }());
GN⁺ görüşü
-
canvas-confetti, web sayfalarında kolayca confetti efekti uygulanmasını sağlayan hafif bir kütüphane gibi görünüyor. Hem NPM ile kurulum hem de CDN yöntemi desteklendiği için geliştirici açısından oldukça pratik görünüyor. -
Confetti efektinde çeşitli ayarları desteklediği için esnekliği yüksek. Confetti sayısı, yayılma miktarı, boyut, şekil ve renk gibi unsurlar serbestçe ayarlanabildiğinden farklı atmosferler oluşturmak mümkün görünüyor.
-
Metin veya SVG path kullanarak özel şekilli confetti üretilebilmesi ilgi çekici. Özellikle emoji kullanan confetti yaklaşımı eğlenceli bir fikir gibi duruyor.
-
Web Worker kullanarak ana thread'i bloklamadan animasyon çalıştırabilmesi de bir avantaj gibi görünüyor. Ancak bu durumda canvas'ın doğrudan kontrol edilememesi bir trade-off yaratıyor.
-
Animasyona duyarlı bazı kullanıcıları düşünerek azaltılmış hareket modunu desteklemesi, web erişilebilirliği açısından olumlu. Gelecek sürümlerde bu modun varsayılan olarak etkinleşmesinin planlandığı da not edilmeli.
-
Genel olarak, kullanımı kolay ve çeşitli seçenekler sunan bir kütüphane gibi görünüyor. Neşeli bir atmosfer gerektiren kutlama sayfaları veya oyunlar için uygun olabilir. Ancak aşırı kullanım kullanıcı deneyimini olumsuz etkileyebileceğinden dengeli şekilde kullanılması daha doğru olur.
1 yorum
Hacker News görüşleri