Library animasi confetti frontend yang berguna
(github.com/catdad)-
Cara instalasi
- Bisa diinstal sebagai modul melalui NPM
npm install --save canvas-confetti - Bisa digunakan di proyek dengan
require('canvas-confetti') - Karena ini adalah komponen klien, library ini tidak berjalan di Node. Proyek harus dibangun menggunakan webpack atau sejenisnya
- Bisa langsung disertakan di halaman HTML melalui CDN
<script src="https://cdn.jsdelivr.net/npm/canvas-confetti@1.9.2/…; - Saat menyertakannya ke dalam proyek, disarankan menggunakan versi terbaru dari halaman releases
- Bisa diinstal sebagai modul melalui NPM
-
Mode pengurangan animasi
- Sebagian pengguna tidak menyukai motion, jadi hal ini perlu dipertimbangkan
- Dengan opsi
disableForReducedMotion, kita bisa mengakomodasi pengguna yang tidak menginginkan animasi yang mengganggu - Secara default dinonaktifkan, tetapi nilai default ini direncanakan akan berubah pada rilis mayor mendatang
API
-
confetti([options {Object}])→Promise|null- Menerima satu objek opsi sebagai parameter
- Jika
window.Promisedapat digunakan, fungsi ini mengembalikan Promise; jika tidak bisa digunakan (misalnya IE), mengembalikannull - Implementasi Promise bisa disediakan melalui polyfill atau
confetti.Promise - Jika
confettidipanggil beberapa kali sebelum selesai, fungsi ini mengembalikan Promise yang sama. Secara internal elemen canvas yang sama digunakan kembali - Setelah semua animasi selesai, Promise yang dikembalikan dari setiap pemanggilan akan di-resolve
- Properti utama pada objek
optionsparticleCount,angle,spread,startVelocity,decay,gravity,drift,ticks,origin,colors,shapes,scalar,zIndexdll.
-
confetti.shapeFromPath({ path, matrix? })→Shape- Membuat bentuk confetti kustom menggunakan string SVG Path
- Hanya mendukung warna solid dan Stroke belum diimplementasikan
- Memerlukan matriks transformasi. Bisa diberikan langsung atau dihitung menggunakan helper
- Terbatas pada browser yang mendukung
Path2D - Mengembalikan objek
Shape
-
confetti.shapeFromText({ text, scalar?, color?, fontFamily? })→Shape- Fitur untuk merender confetti emoji
- Disarankan menggunakan satu karakter, terutama emoji
- Karena teks dirasterisasi, hasilnya tidak cocok untuk diubah ukurannya setelah dibuat
- Jika ukuran diubah dengan
scalar, nilai yang sama juga harus digunakan di sini - Opsi
text,scalar,color,fontFamily
-
confetti.create(canvas, [globalOptions])→function- Membuat instance fungsi
confettiyang menggunakan canvas kustom - Ukuran canvas bisa dibatasi
- Opsi global
resize: mengatur ukuran gambar canvas dan apakah ukurannya dipertahankan saat ukuran jendela berubahuseWorker: apakah rendering menggunakan web worker asinkron jika memungkinkandisableForReducedMotion: apakah confetti dinonaktifkan sepenuhnya bagi pengguna mode pengurangan animasi
- Hal yang perlu diperhatikan saat menggunakan
useWorker: true- Canvas tidak boleh dimanipulasi secara langsung. Kontrolnya dipindahkan ke web worker
- Membuat instance fungsi
-
confetti.reset()- Menghentikan animasi dan menghapus semua confetti
- Promise yang belum terselesaikan langsung di-resolve
- Instance yang dibuat dengan
confetti.creatememiliki metoderesetsendiri
Contoh penggunaan
-
Penggunaan dasar
confetti(); -
Menggunakan banyak confetti
confetti({ particleCount: 150 }); -
Menyebarkan lebih lebar
confetti({ spread: 180 }); -
Menembakkan sedikit confetti dari posisi acak
confetti({ particleCount: 100, startVelocity: 30, spread: 360, origin: { x: Math.random(), y: Math.random() - 0.2 } }); -
Menembakkan terus-menerus dari beberapa arah selama 30 detik
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 GN⁺
-
canvas-confettitampaknya merupakan library ringan yang memudahkan penerapan efek confetti di halaman web. Library ini mendukung instalasi melalui NPM maupun CDN, sehingga terlihat cukup nyaman digunakan oleh developer. -
Library ini mendukung berbagai pengaturan efek confetti sehingga cukup fleksibel. Jumlah confetti, tingkat penyebaran, ukuran, bentuk, dan warna bisa diatur dengan bebas untuk menciptakan berbagai suasana.
-
Menarik bahwa confetti dengan bentuk kustom juga bisa dibuat menggunakan teks atau SVG path. Khususnya, confetti berbasis emoji terasa seperti ide yang menyenangkan.
-
Kemampuan menjalankan animasi dengan Web Worker tanpa memblokir main thread juga tampak menjadi kelebihan. Namun, dalam kasus ini canvas tidak lagi bisa dikendalikan secara langsung, sehingga ada trade-off.
-
Dukungan mode pengurangan motion untuk pengguna yang sensitif terhadap animasi merupakan hal positif dari sisi aksesibilitas web. Karena mode ini direncanakan akan aktif secara default di versi mendatang, hal ini perlu diperhatikan.
-
Secara keseluruhan, ini tampak seperti library yang mudah digunakan dan menawarkan banyak opsi. Cocok untuk halaman perayaan atau game yang membutuhkan suasana ceria. Namun, penggunaan yang berlebihan dapat merusak pengalaman pengguna, jadi sebaiknya digunakan secara proporsional.
1 komentar
Komentar Hacker News
confetti.resetti()