React DOM için hareket · React Native'in Animated API'si

Hareketi bir kez yazın. Akıcı çalışır, asla bozulmaz.

Animated, React Native'in Animated'ını web'e getirir. Tek bir değer, her karede React render'ı olmadan istediğiniz kadar öğeyi yönetir; desteklenen hareketi tarayıcının kendisi oynatır ve her kesinti ekranda olandan devam eder.

Kurulum
npm install @kkwaenggwari/animated

Tek bir saat değeri 64 şeklin tamamının dalgalarını yönetir. İşaretçiyi sahnenin üzerinde gezdirin.

Bu sürümde ölçüldü

Masaüstü bir PC'de başsız Chrome üzerinde 1.0.0 derlemesiyle ölçüldü. Sayılar cihaza göre değişir. Nasıl ölçtük

  • 0.00ms400 öğe hareket ederken kare başına JavaScript

    Animated öğelerdeki sonlu transform ve opacity hareketini tarayıcı oynatır. Sayfanın kendi kare callback'leri hiçbir iş yapmaz.

  • 0.13msTek değer 10.000 öğeyi yönetirken kare başına JavaScript

    Değer tek bir CSS değişkeni yazar; her öğe kendi stilini CSS'te bu değişkenden türetir.

  • 0Hareket sırasında React render'ları

    Değerler asla React durumundan geçmez. Bileşenler kare değiştiğinde değil, props'unuz değiştiğinde render edilir.

01 · Basit

Zaten bildiğiniz API, sıradan React style üzerinde

timing, spring, interpolate, loop ve Animated.event React Native'deki ad ve yapılandırmalarını korur. Değer doğrudan sıradan style prop'una girer; ilk hareketten önce özel bir bileşen öğrenmeniz gerekmez.

  • React Native kodunu Animated.View'u Animated.div olarak yeniden adlandırarak taşıyın.
  • Tek bir değer bir şeridi, bir kadranı ve bir kart sırasını aynı anda, her birini kendi aralığıyla hareket ettirebilir.
  • useAnimated tarifin sahibidir: bağlanınca başlar, bir bağımlılık değişince yeniden başlar ve ayrılınca temizler.

Örnek hazırlanıyor…

React Native'dekiyle aynı çağrılar

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 · Hızlı

Her karede React render'ı yok

Hook'un değeri bir CSS değişkenidir. Doğrusal interpolasyonlar ve aritmetik, bu değişkenin kesin calc() ifadelerine dönüşür; böylece her kare tek bir yazmadır ve gerisini tarayıcı hesaplar. Animated.<tag> öğelerindeki sonlu transform ve opacity hareketini tarayıcı, kare callback'i olmadan oynatır.

  • Nokta sayısını değiştirin: sayaç, React'in her değişiklikte bir kez render ettiğini, asla her karede etmediğini gösterir.
  • scope değeri her öğe yerine kapsayıcıya bir kez yazar.
  • inspect(element) her özelliğin hangi yolu neden kullandığını söyler.

Örnek hazırlanıyor…

03 · Kararlı

İstediğiniz yerde kesin. Devam eder.

Yeni bir hedef öğenin ekrandaki yerinden başlar ve yay hızı da korur; yarı yolda geri dönüş önce durmak yerine akıcı biçimde kıvrılır. Bir hook'ta bildirilen denetleyiciler değiştirilince ve ayrılınca durur ve serbest bırakılır; sunucuda render edilen markup hidrasyondan sonra da animasyona devam eder.

  • Hızlıca iki kez tıklayın: spring ile yol kıvrılır, timing ile konum korunur ama yeni bir eğri başlar.
  • Durdurmak değeri olduğu yerde bırakır; hiçbir şey bitiş durumuna sıçramaz.
  • Ayrılma, rota değişikliği ya da gizli sekmeden sonra unutulmuş kare döngüsü kalmaz.

Örnek hazırlanıyor…

Animated üzerine kurulu

Hazır bir bileşen mi lazım? Animated Chorus.

Dönen sayılar, yer değiştiren kart vurguları, ilerleme, sheet'ler ve animasyonlu listeler; doğrudan React ve React Native'e takılır. Bu üçü şu anda bu sayfada çalışıyor.

Animated Chorus'u ziyaret edin

Üç dakikada başlayın

Paketi kurun, ilk değeri hareket ettirin, sonra önünüzdeki iş için bir kılavuz seçin.

npm install @kkwaenggwari/animated

Ara

Belgelerde aramak için yazın.