React DOM के लिए गति · React Native का Animated API
गति एक बार लिखें। सहज चलती है, कभी नहीं टूटती।
Animated, React Native के Animated को वेब पर लाता है। एक मान हर फ़्रेम में React रेंडर के बिना कितने भी एलिमेंट चलाता है, समर्थित गति ख़ुद ब्राउज़र चलाता है, और हर रुकावट स्क्रीन पर दिख रही स्थिति से आगे बढ़ती है।
npm install @kkwaenggwari/animatedएक घड़ी मान सभी 64 आकृतियों की लहरें चलाता है। मंच पर पॉइंटर घुमाएँ।
इस बिल्ड पर मापा गया
डेस्कटॉप PC पर हेडलेस Chrome में 1.0.0 बिल्ड से मापा गया। आँकड़े डिवाइस पर निर्भर करते हैं। हमने कैसे मापा
- 0.00ms400 एलिमेंट हिलते समय हर फ़्रेम का JavaScript
Animated एलिमेंट पर transform और opacity की सीमित गति ब्राउज़र चलाता है। पेज के अपने फ़्रेम callback कोई काम नहीं करते।
- 0.13msएक मान से 10,000 एलिमेंट चलने पर हर फ़्रेम का JavaScript
मान एक CSS वेरिएबल लिखता है; हर एलिमेंट CSS में उससे अपनी स्टाइल निकालता है।
- 0गति के दौरान React रेंडर
मान कभी React स्टेट से नहीं गुज़रते। कंपोनेंट तब रेंडर होते हैं जब आपके props बदलें, फ़्रेम बदलने पर नहीं।
01 · आसान
वह API जो आप पहले से जानते हैं, सामान्य React style पर
timing, spring, interpolate, loop और Animated.event React Native के नाम और कॉन्फ़िगरेशन बनाए रखते हैं। मान सीधे सामान्य style prop में जाता है, इसलिए पहली गति से पहले कोई ख़ास कंपोनेंट नहीं सीखना पड़ता।
- React Native का कोड
Animated.ViewकोAnimated.divनाम देकर ले आएँ। - एक मान एक साथ पट्टी, डायल और कार्डों की पंक्ति चला सकता है, हर एक अपनी सीमा के साथ।
useAnimatedनुस्ख़े का मालिक है: माउंट पर शुरू होता है, निर्भरता बदलने पर फिर शुरू होता है और अनमाउंट पर सफ़ाई करता है।
उदाहरण तैयार हो रहा है…
React Native जैसी ही कॉल
// React Native
<Animated.View style={{ transform: [{ rotate }] }} />
// React DOM with @kkwaenggwari/animated — the rest is identical
<Animated.div style={{ transform: [{ rotate }] }} />
const spin = useAnimatedValue(0);
const rotate = spin.interpolate({ inputRange: [0, 1], outputRange: ['0deg', '360deg'] });
Animated.loop(
Animated.timing(spin, { toValue: 1, duration: 900, easing: Easing.linear, useNativeDriver: true }),
).start();02 · तेज़
हर फ़्रेम में React रेंडर नहीं
हुक का मान एक CSS वेरिएबल है। रैखिक इंटरपोलेशन और अंकगणित उस वेरिएबल के सटीक calc() एक्सप्रेशन बन जाते हैं, इसलिए हर फ़्रेम एक लेखन है और बाक़ी ब्राउज़र गणना करता है। Animated.<tag> एलिमेंट पर transform और opacity की सीमित गति ब्राउज़र फ़्रेम callback के बिना चलाता है।
- बिंदुओं की संख्या बदलें: काउंटर दिखाता है कि React हर बदलाव पर एक बार रेंडर हुआ, हर फ़्रेम पर कभी नहीं।
scopeमान को हर एलिमेंट के बजाय कंटेनर पर एक बार लिखता है।inspect(element)बताता है कि हर प्रॉपर्टी कौन-सा रास्ता इस्तेमाल करती है और क्यों।
उदाहरण तैयार हो रहा है…
03 · स्थिर
कहीं भी रोकें। वह आगे बढ़ता है।
नया लक्ष्य वहीं से शुरू होता है जहाँ एलिमेंट स्क्रीन पर है, और स्प्रिंग वेग भी बनाए रखता है, इसलिए बीच रास्ते का मोड़ पहले रुकने के बजाय सहजता से मुड़ता है। हुक में घोषित कंट्रोलर बदलने और अनमाउंट पर रुकते और छूटते हैं, और सर्वर पर रेंडर हुआ markup हाइड्रेशन के बाद एनिमेट होता रहता है।
- जल्दी से दो बार क्लिक करें:
springके साथ रास्ता मुड़ता है,timingके साथ स्थिति बनी रहती है पर नया वक्र शुरू होता है। - रोकने पर मान जहाँ है वहीं रहता है; कुछ भी अंतिम स्थिति पर नहीं कूदता।
- अनमाउंट, रूट बदलने या छिपे टैब के बाद कोई भूला हुआ फ़्रेम लूप नहीं रहता।
उदाहरण तैयार हो रहा है…
- चुंबकीय डॉकपॉइंटर गुज़रने पर आइकन बड़े होते हैं, पड़ोसियों को किनारे धकेलते हैं, और उसके जाने पर शांत हो जाते हैं।
moveInputfollowuseAnimatedCSSmultiply - स्वाइप डेकऊपर का कार्ड खींचें। सीमा पार करने पर वह उड़ जाता है; वरना स्प्रिंग से लौट आता है।
dragInputuseAnimatedListenerAnimated.div - साझा गैलरीटाइल बड़ी होकर विवरण दृश्य बनती है और सिकुड़कर ग्रिड में लौटती है।
Animated.SceneAnimated.Keepmove
Animated पर बना
तैयार कंपोनेंट चाहिए? Animated Chorus।
घूमते अंक, चलती कार्ड हाइलाइट, प्रगति, शीट और एनिमेटेड सूचियाँ, जो सीधे React और React Native में लग जाती हैं। ये तीन अभी इसी पेज पर चल रहे हैं।
Animated Chorus पर जाएँतीन मिनट में शुरू करें
पैकेज इंस्टॉल करें, पहला मान हिलाएँ, फिर अपने सामने के काम की गाइड चुनें।
npm install @kkwaenggwari/animated