उपयोगी फ्रंटएंड confetti animation लाइब्रेरी
(github.com/catdad)-
इंस्टॉल करने का तरीका
- NPM के ज़रिए मॉड्यूल के रूप में इंस्टॉल किया जा सकता है
npm install --save canvas-confetti require('canvas-confetti')से प्रोजेक्ट में इस्तेमाल किया जा सकता है- यह एक client component है, इसलिए Node में काम नहीं करता। webpack आदि का उपयोग करके प्रोजेक्ट को build करना होगा
- CDN के ज़रिए HTML पेज में सीधे शामिल किया जा सकता है
<script src="https://cdn.jsdelivr.net/npm/canvas-confetti@1.9.2/…; - प्रोजेक्ट में शामिल करते समय releases पेज से नवीनतम वर्ज़न इस्तेमाल करने की सिफारिश की जाती है
- NPM के ज़रिए मॉड्यूल के रूप में इंस्टॉल किया जा सकता है
-
reduced motion मोड
- कुछ उपयोगकर्ता motion पसंद नहीं करते, इसलिए इसे ध्यान में रखना चाहिए
disableForReducedMotionविकल्प के ज़रिए उन उपयोगकर्ताओं का ध्यान रखा जा सकता है जो विचलित करने वाले animation नहीं चाहते- डिफ़ॉल्ट रूप से यह निष्क्रिय है, लेकिन भविष्य के किसी major release में इसका डिफ़ॉल्ट मान बदलने की योजना है
API
-
confetti([options {Object}])→Promise|null- यह एक single options object को पैरामीटर के रूप में लेता है
- यदि
window.Promiseउपलब्ध है तो Promise लौटाता है, और यदि उपलब्ध नहीं है (जैसे IE) तोnullलौटाता है - Polyfill या
confetti.Promiseके माध्यम से Promise implementation दी जा सकती है - पूरा होने से पहले
confettiको कई बार कॉल करने पर वही Promise लौटता है। अंदरूनी रूप से वही canvas element दोबारा उपयोग होता है - सभी animations पूरी होने पर हर कॉल से लौटाया गया Promise resolve हो जाता है
optionsobject की मुख्य propertiesparticleCount,angle,spread,startVelocity,decay,gravity,drift,ticks,origin,colors,shapes,scalar,zIndexआदि
-
confetti.shapeFromPath({ path, matrix? })→Shape- SVG Path string का उपयोग करके custom confetti shape बनाई जा सकती है
- केवल single color समर्थित है और Stroke अभी लागू नहीं है
- transformation matrix की ज़रूरत होती है। इसे सीधे दिया जा सकता है या helper से calculate किया जा सकता है
- यह
Path2Dको support करने वाले browsers तक सीमित है Shapeobject लौटाता है
-
confetti.shapeFromText({ text, scalar?, color?, fontFamily? })→Shape- emoji confetti render करने के लिए फ़ीचर
- single character, खासकर emoji, इस्तेमाल करने की सिफारिश की जाती है
- टेक्स्ट rasterize किया जाता है, इसलिए बनने के बाद उसका आकार बदलना उपयुक्त नहीं है
scalarसे आकार बदलने पर यहाँ भी वही मान इस्तेमाल करना होगाtext,scalar,color,fontFamilyविकल्प
-
confetti.create(canvas, [globalOptions])→function- custom canvas इस्तेमाल करने वाले
confettifunction का instance बनाता है - canvas के आकार को सीमित किया जा सकता है
- global options
resize: canvas image size सेट करना और window size बदलने पर उसे बनाए रखनाuseWorker: जहाँ संभव हो, asynchronous web worker का उपयोग करके render करना है या नहींdisableForReducedMotion: reduced motion मोड उपयोगकर्ताओं के लिए confetti को पूरी तरह निष्क्रिय करना है या नहीं
useWorker: trueइस्तेमाल करते समय सावधानियाँ- canvas को सीधे manipulate नहीं करना चाहिए। उसका नियंत्रण web worker को transfer हो जाता है
- custom canvas इस्तेमाल करने वाले
-
confetti.reset()- animation रोकता है और सभी confetti हटा देता है
- unresolved Promise को तुरंत resolve कर देता है
confetti.createसे बनाए गए instance का अपनाresetmethod होता है
उपयोग उदाहरण
-
बुनियादी उपयोग
confetti(); -
बड़ी मात्रा में confetti का उपयोग
confetti({ particleCount: 150 }); -
चौड़ा फैलाव
confetti({ spread: 180 }); -
random position से कम मात्रा में लॉन्च करना
confetti({ particleCount: 100, startVelocity: 30, spread: 360, origin: { x: Math.random(), y: Math.random() - 0.2 } }); -
30 सेकंड तक कई दिशाओं से लगातार लॉन्च करना
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⁺ की राय
-
canvas-confettiएक हल्की लाइब्रेरी लगती है जिससे वेब पेज पर आसानी से confetti effect लागू किया जा सकता है। NPM इंस्टॉलेशन और CDN, दोनों का समर्थन होने से डेवलपर सुविधा अच्छी लगती है. -
यह confetti effect के लिए कई तरह की settings देता है, इसलिए इसकी लचीलापन अधिक है। confetti की संख्या, फैलाव, आकार, shape, color आदि को स्वतंत्र रूप से नियंत्रित करके अलग-अलग माहौल बनाए जा सकते हैं.
-
टेक्स्ट या SVG path का उपयोग करके custom shape वाले confetti भी बनाए जा सकते हैं, जो दिलचस्प है। खासकर emoji का उपयोग करने वाला confetti एक मज़ेदार विचार लगता है.
-
Web Worker का उपयोग करके main thread को block किए बिना animation चलाया जा सकता है, यह भी एक फ़ायदा लगता है। हालांकि इस स्थिति में canvas को सीधे नियंत्रित नहीं किया जा सकता, इसलिए एक trade-off है.
-
animation के प्रति संवेदनशील कुछ उपयोगकर्ताओं को ध्यान में रखते हुए reduced motion मोड का समर्थन करना web accessibility के लिहाज़ से सकारात्मक है। भविष्य के वर्ज़न में यह मोड डिफ़ॉल्ट रूप से सक्रिय होगा, इसलिए इस पर ध्यान देना चाहिए.
-
कुल मिलाकर यह उपयोग में आसान और कई विकल्प देने वाली लाइब्रेरी लगती है। उत्सव जैसा माहौल बनाने वाले celebration pages या games के लिए यह उपयुक्त हो सकती है। हालांकि इसका अत्यधिक उपयोग user experience को प्रभावित कर सकता है, इसलिए इसे संतुलित रूप से इस्तेमाल करना बेहतर होगा.
1 टिप्पणियां
Hacker News राय