Kılavuzlar · 01

Değerler ve stil

Değeri bileşende tutun, çıktıları calc() ile türetin ve CSS değişkeninin nereye yazılacağını seçin.

Değere sahip olmak

useAnimatedValue(initial) bileşene ait bir Value oluşturur. Bir sayı ya da alanları ayrı değerler olan { x: 0, opacity: 1 } gibi bir kayıt kullanın.

Sıradan style içinde hook değeri var(--kkwa-…, initial) belirtecidir. Güncellemeler bu değişkeni onu kullanan öğelere yazar; React render etmez.

Örnek hazırlanıyor…

calc() ile türetmek

Easing'siz interpolasyon ve bir sabitle add, subtract, multiply ya da divide, aynı değişkenin kesin calc() ifadelerine dönüşür. Tarayıcı bunları hesaplar; bunlar için hiçbir karede JavaScript çalışmaz.

Slide.jsx
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})` }} />;

Örnek hazırlanıyor…

Renkler ve kendi hesaplamalarınız

Renkler, easing'li interpolasyonlar, modulo, diffClamp ve AnimatedComputed calc() olarak yazılamaz. useAnimatedCSS(node) onlara JavaScript'in güncellediği, bileşenle aynı ömre sahip kendi CSS değişkenini verir.

Böyle bir düğümü doğrudan style içinde kullanmak hata fırlatır; böylece maliyet asla gizli kalmaz.

Glow.jsx
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 }} />;

Tarifin sahibi hook olsun

useAnimated(initial, factory, deps) değerin ve factory içinde senkron bildirilen her denetleyicinin sahibidir. Bağlanınca başlar, bir bağımlılık değişince yeniden başlar ve ayrılınca durur.

Olaylarla yönetilen oynatma için { autoStart: false } verin, sonra döndürülen değerde start(), stop() ya da reset() çağırın.

Intro.jsx
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))` }} />;

Birçok öğe için tek yazma

Varsayılan olarak değişkeni, satır içi stili değeri kullanan her öğe alır. scope ile değişken kapsayıcıya bir kez yazılır ve çocukları onu miras alır: yüzlerce öğe için doğru seçim.

AnimatedProvider scope={ref} altındaki tüm hook değerleri için varsayılan scope'u ayarlar.

Field.jsx
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'te değer okumak

getValue() React aboneliği olmadan bir anlık görüntü döndürür. useAnimatedListener(node, fn) her değişiklikte sizi çağırır ve ayrılınca listener'ı kaldırır. Render için değil, canvas'a çizim ya da analitik için kullanın.

Ara

Belgelerde aramak için yazın.