Thư viện animation confetti frontend hữu ích
(github.com/catdad)-
Cách cài đặt
- Có thể cài dưới dạng module thông qua NPM
npm install --save canvas-confetti - Có thể dùng trong dự án bằng
require('canvas-confetti') - Vì là component phía client nên không chạy trên Node. Cần build dự án bằng webpack hoặc công cụ tương tự
- Có thể nhúng trực tiếp vào trang HTML thông qua CDN
<script src="https://cdn.jsdelivr.net/npm/canvas-confetti@1.9.2/…; - Khi đưa vào dự án, nên dùng phiên bản mới nhất từ trang releases
- Có thể cài dưới dạng module thông qua NPM
-
Chế độ giảm animation
- Một số người dùng không thích chuyển động, nên cần cân nhắc điều này
- Có thể dùng tùy chọn
disableForReducedMotionđể hỗ trợ những người dùng không muốn animation gây rối mắt - Mặc định đang tắt, nhưng dự kiến sẽ thay đổi giá trị mặc định trong bản phát hành major sau này
API
-
confetti([options {Object}])→Promise|null- Nhận một đối tượng tùy chọn duy nhất làm tham số
- Nếu dùng được
window.Promisethì trả về Promise, nếu không dùng được (như IE) thì trả vềnull - Có thể cung cấp implementation Promise thông qua polyfill hoặc
confetti.Promise - Nếu gọi
confettinhiều lần trước khi hoàn tất thì sẽ trả về cùng một Promise. Nội bộ tái sử dụng cùng một phần tử canvas - Khi mọi animation kết thúc, Promise trả về từ mỗi lần gọi sẽ được resolve
- Các thuộc tính chính của đối tượng
optionsparticleCount,angle,spread,startVelocity,decay,gravity,drift,ticks,origin,colors,shapes,scalar,zIndexv.v.
-
confetti.shapeFromPath({ path, matrix? })→Shape- Tạo hình confetti tùy chỉnh bằng chuỗi SVG Path
- Chỉ hỗ trợ màu đơn, chưa hỗ trợ Stroke
- Cần ma trận biến đổi. Có thể truyền trực tiếp hoặc tính bằng helper
- Chỉ dùng được trên trình duyệt hỗ trợ
Path2D - Trả về đối tượng
Shape
-
confetti.shapeFromText({ text, scalar?, color?, fontFamily? })→Shape- Tính năng để render confetti emoji
- Khuyến nghị dùng một ký tự đơn, đặc biệt là emoji
- Vì văn bản được raster hóa nên không phù hợp để đổi kích thước sau khi tạo
- Khi đổi kích thước bằng
scalarthì cũng cần dùng cùng giá trị tại đây - Các tùy chọn
text,scalar,color,fontFamily
-
confetti.create(canvas, [globalOptions])→function- Tạo một instance của hàm
confettidùng canvas tùy chỉnh - Có thể giới hạn kích thước của canvas
- Tùy chọn toàn cục
resize: thiết lập kích thước ảnh canvas và có giữ nguyên khi kích thước cửa sổ thay đổi hay khônguseWorker: có dùng web worker bất đồng bộ để render nếu khả dụng hay khôngdisableForReducedMotion: có vô hiệu hóa hoàn toàn confetti với người dùng bật chế độ giảm animation hay không
- Lưu ý khi dùng
useWorker: true- Không được thao tác trực tiếp với canvas. Quyền điều khiển sẽ được chuyển cho web worker
- Tạo một instance của hàm
-
confetti.reset()- Dừng animation và xóa toàn bộ confetti
- Resolve ngay các Promise chưa được giải quyết
- Instance tạo bằng
confetti.createcó phương thứcresetriêng
Ví dụ sử dụng
-
Cách dùng cơ bản
confetti(); -
Dùng nhiều confetti
confetti({ particleCount: 150 }); -
Tung rộng hơn
confetti({ spread: 180 }); -
Bắn một lượng nhỏ từ vị trí ngẫu nhiên
confetti({ particleCount: 100, startVelocity: 30, spread: 360, origin: { x: Math.random(), y: Math.random() - 0.2 } }); -
Bắn liên tục từ nhiều hướng trong 30 giây
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); } }());
Ý kiến của GN⁺
-
canvas-confetticó vẻ là một thư viện gọn nhẹ giúp áp dụng hiệu ứng confetti lên trang web một cách dễ dàng. Nó hỗ trợ cả cài đặt qua NPM lẫn dùng qua CDN, nên khá tiện cho lập trình viên. -
Thư viện hỗ trợ nhiều thiết lập cho hiệu ứng confetti nên rất linh hoạt. Có thể tự do điều chỉnh số lượng confetti, độ lan tỏa, kích thước, hình dạng, màu sắc... để tạo ra nhiều bầu không khí khác nhau.
-
Việc có thể tạo confetti với hình dạng tùy chỉnh bằng văn bản hoặc SVG path là một điểm thú vị. Đặc biệt, confetti dùng emoji là một ý tưởng khá vui nhộn.
-
Khả năng dùng Web Worker để chạy animation mà không chặn main thread cũng là một ưu điểm. Tuy vậy, đổi lại thì không thể điều khiển trực tiếp canvas trong trường hợp này.
-
Việc hỗ trợ chế độ giảm chuyển động để quan tâm tới những người dùng nhạy cảm với animation là một điểm tích cực về mặt khả năng truy cập web. Theo đó, ở các phiên bản tương lai chế độ này được dự kiến sẽ bật mặc định, nên cần lưu ý.
-
Nhìn chung đây có vẻ là một thư viện dễ dùng và cung cấp nhiều tùy chọn. Nó phù hợp cho các trang chúc mừng, game hoặc những nơi cần tạo không khí vui nhộn. Tuy nhiên, nếu lạm dụng thì có thể ảnh hưởng xấu tới trải nghiệm người dùng, nên nên sử dụng ở mức hợp lý.
1 bình luận
Ý kiến Hacker News
confetti.resetti()