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.
npm install @kkwaenggwari/animatedTek 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'uAnimated.divolarak 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.
useAnimatedtarifin 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
// 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.
scopedeğ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:
springile yol kıvrılır,timingile 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…
- Mıknatıslı dockİşaretçi geçerken simgeler büyür, komşularını iter ve işaretçi gidince yatışır.
moveInputfollowuseAnimatedCSSmultiply - Kaydırmalı desteÜstteki kartı sürükleyin. Eşiği geçerse uçup gider; aksi hâlde yayla geri döner.
dragInputuseAnimatedListenerAnimated.div - Paylaşılan galeriBir kutucuk büyüyüp ayrıntı görünümüne dönüşür ve küçülerek ızgaraya geri döner.
Animated.SceneAnimated.Keepmove
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