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 जैसी ही कॉल

Spinner.jsx
// 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 के साथ स्थिति बनी रहती है पर नया वक्र शुरू होता है।
  • रोकने पर मान जहाँ है वहीं रहता है; कुछ भी अंतिम स्थिति पर नहीं कूदता।
  • अनमाउंट, रूट बदलने या छिपे टैब के बाद कोई भूला हुआ फ़्रेम लूप नहीं रहता।

उदाहरण तैयार हो रहा है…

Animated पर बना

तैयार कंपोनेंट चाहिए? Animated Chorus।

घूमते अंक, चलती कार्ड हाइलाइट, प्रगति, शीट और एनिमेटेड सूचियाँ, जो सीधे React और React Native में लग जाती हैं। ये तीन अभी इसी पेज पर चल रहे हैं।

Animated Chorus पर जाएँ

तीन मिनट में शुरू करें

पैकेज इंस्टॉल करें, पहला मान हिलाएँ, फिर अपने सामने के काम की गाइड चुनें।

npm install @kkwaenggwari/animated

खोजें

दस्तावेज़ खोजने के लिए टाइप करें।