Útmutatók · 01
Értékek és stílus
Birtokoljon egy értéket a komponensben, származtasson kimeneteket calc()-kal, és válassza meg, hová íródjon a CSS-változó.
Egy érték birtoklása
A useAnimatedValue(initial) a komponenshez tartozó Value-t hoz létre. Használjon számot vagy olyan rekordot, mint a { x: 0, opacity: 1 }, amelynek mezői külön értékek.
Sima style-ban a hook értéke a var(--kkwa-…, initial) token. A frissítések ezt a változót írják az azt használó elemekre; a React nem renderel.
A példa előkészítése…
Származtatás calc()-kal
Az easing nélküli interpoláció, valamint az add, subtract, multiply vagy divide konstanssal ugyanannak a változónak pontos calc() kifejezéseivé válik. Ezeket a böngésző számolja; miattuk egyetlen képkockában sem fut 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})` }} />;A példa előkészítése…
Színek és saját számítások
A színek, az easinggel végzett interpolációk, a modulo, a diffClamp és az AnimatedComputed nem írhatók calc() formában. A useAnimatedCSS(node) saját, JavaScript által frissített CSS-változót ad nekik, a komponenssel azonos élettartammal.
Ha egy ilyen csomópontot közvetlenül a style-ban használ, az hibát dob, így a költség soha nem rejtett.
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 }} />;A receptet birtokolja a hook
A useAnimated(initial, factory, deps) birtokolja az értéket és minden, a factoryban szinkron deklarált vezérlőt. Csatoláskor indul, függőségváltozáskor újraindul, és leválasztáskor leáll.
Eseményvezérelt lejátszáshoz adja át a { autoStart: false } beállítást, majd hívja meg a visszaadott értéken a start(), stop() vagy reset() metódust.
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))` }} />;Egy írás sok elemhez
Alapértelmezés szerint a változót minden olyan elem megkapja, amelynek inline stílusa használja az értéket. A scope használatakor a változó egyszer íródik a tárolóelemre, és a gyermekei öröklik: ez a jó választás több száz elemhez.
Az AnimatedProvider scope={ref} az alatta lévő összes hookértékhez beállítja az alapértelmezett scope-ot.
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>;Értékek olvasása JavaScriptben
A getValue() React-feliratkozás nélkül ad vissza pillanatképet. A useAnimatedListener(node, fn) minden változáskor meghívja Önt, és leválasztáskor eltávolítja a listenert. Canvasra rajzoláshoz vagy analitikához használja, ne rendereléshez.