मार्गदर्शक · 01
मूल्ये आणि style
कंपोनंटमध्ये मूल्य ठेवा, calc() ने आउटपुट मिळवा, आणि CSS व्हेरिएबल कुठे लिहिला जाईल ते निवडा.
मूल्य ठेवणे
useAnimatedValue(initial) कंपोनंटच्या मालकीचे Value तयार करते. संख्या वापरा, किंवा { x: 0, opacity: 1 } सारखा record ज्याची फील्ड्स स्वतंत्र मूल्ये असतात.
साध्या style मध्ये हुक मूल्य हे var(--kkwa-…, initial) टोकन असते. अद्यतने ते वापरणाऱ्या एलिमेंट्सवर तो व्हेरिएबल लिहितात; React रेंडर होत नाही.
उदाहरण तयार होत आहे…
calc() ने मिळवणे
easing नसलेले interpolation आणि स्थिरांकासह add, subtract, multiply किंवा divide त्याच व्हेरिएबलच्या अचूक calc() अभिव्यक्ती बनतात. ब्राउझर त्या मोजतो; प्रति फ्रेम त्यांच्यासाठी JavaScript चालत नाही.
const progress = useAnimatedValue(0);
// A linear interpolation of a hook value is a calc() of the same CSS variable.
const x = progress.interpolate({ inputRange: [0, 1], outputRange: ['0px', '180px'] });
const half = multiply(progress, 0.5);
<div style={{ opacity: half, transform: `translateX(${x})` }} />;उदाहरण तयार होत आहे…
रंग आणि सानुकूल गणना
रंग, easing असलेले interpolation, modulo, diffClamp आणि AnimatedComputed calc() म्हणून लिहिता येत नाहीत. useAnimatedCSS(node) त्यांना JavaScript अद्ययावत करणारा स्वतःचा CSS व्हेरिएबल, त्याच कंपोनंट आयुष्यासह, देते.
असा node थेट style मध्ये वापरल्यास त्रुटी फेकली जाते, त्यामुळे खर्च कधीही लपत नाही.
const progress = useAnimatedValue(0);
// Colors and eased curves are not calc() expressions: give them their own CSS value.
const color = useAnimatedCSS(
progress.interpolate({ inputRange: [0, 1], outputRange: ['#3d3bf3', '#22b8f0'] }),
);
<div style={{ background: color }} />;कृती हुककडे सोपवा
useAnimated(initial, factory, deps) मूल्य आणि factory मध्ये synchronous पद्धतीने घोषित प्रत्येक कंट्रोलर सांभाळते. माउंटवर सुरू होते, अवलंबित्व बदलल्यावर पुन्हा सुरू होते आणि अनमाउंटवर थांबते.
इव्हेंट-आधारित प्लेबॅकसाठी { autoStart: false } द्या, मग परत मिळालेल्या मूल्यावर start(), stop() किंवा reset() कॉल करा.
const intro = useAnimated(
{ opacity: 0, y: 24 },
(value) => {
parallel([
timing(value.opacity, { toValue: 1, duration: 400 }),
spring(value.y, { toValue: 0, stiffness: 220, damping: 20 }),
]);
},
[],
);
<section style={{ opacity: intro.opacity, transform: `translateY(calc(${intro.y} * 1px))` }} />;अनेक एलिमेंट्ससाठी एकदा लिहा
डीफॉल्टनुसार, inline style मध्ये मूल्य वापरणाऱ्या प्रत्येक एलिमेंटला व्हेरिएबल मिळतो. scope सह व्हेरिएबल एका कंटेनरवर एकदा लिहिला जातो आणि त्याच्या मुलांना वारसाने मिळतो: शेकडो एलिमेंट्ससाठी योग्य पर्याय.
AnimatedProvider scope={ref} त्याच्या खालील प्रत्येक हुक मूल्यासाठी डीफॉल्ट scope सेट करतो.
const field = useRef(null);
// Written once on the field; every child that uses the value inherits it.
const wave = useAnimatedValue(0, { scope: field });
<div ref={field}>
{items.map((item) => (
<i key={item} style={{ transform: `rotate(calc(${wave} * 1turn))` }} />
))}
</div>;JavaScript मध्ये मूल्ये वाचणे
getValue() React ला सबस्क्राइब न करता स्नॅपशॉट परत करते. useAnimatedListener(node, fn) प्रत्येक बदलावर तुम्हाला कॉल करते आणि अनमाउंटवर listener काढते. रेंडरिंगसाठी नाही, तर canvas रेखाटन किंवा विश्लेषणासाठी वापरा.