Semua komponen

MotionSwap

Konten yang bertukar dengan crossfade sementara ukurannya mengikuti.

WebReact NativeKonten dan ukuran

Coba

Menyiapkan contoh…

Penggunaan terpendek

SaveButton.jsx
<button onClick={save}>
  <MotionSwap value={status} effect="up">
    {status === 'saving' ? 'Saving…' : status === 'saved' ? 'Saved' : 'Save'}
  </MotionSwap>
</button>;

Yang ditanganinya untuk Anda

  • Elemen berubah ukuran dari ukurannya di layar ke ukuran alami konten baru, jadi tombol tidak pernah melompat.
  • Konten lama memudar di tempatnya sementara konten baru muncul; tidak ada yang tersusun ulang selama pertukaran.
  • Mengubah kembali di tengah pertukaran melanjutkan dari yang ada di layar, bukan menumpuk salinan.
  • Children berupa teks biasa adalah value-nya sendiri; berikan value untuk hal lain.

Gunakan untuk

  • Simpan, lalu Menyimpan…, lalu Tersimpan.
  • Kerangka yang berubah menjadi kartu profil.
  • Tombol putar yang berubah menjadi jeda.

Props

PropTipeBawaanDeskripsi
valueunknownIdentitas konten; nilai baru memicu pertukaran. Children berupa teks biasa adalah identitasnya sendiri.
childrenReactNodeKontennya.
aselement'span'Elemen yang dirender.
inlinebooleanas === 'span'true menyesuaikan ukuran dengan konten (label, ikon); false mengisi lebar induk dan menganimasikan tinggi.
align'start' | 'center' | 'end''center'Posisi konten selama ukuran berubah.
effect'fade' | 'up' | 'down' | 'scale''fade'Cara konten masuk dan pergi: up naik, down turun, scale membesar.
transitionTransitionspringKurva timing { duration, easing } atau pegas { tempo: 'spring', spring }. Pegas mempertahankan momentumnya saat diinterupsi.
onMotionComplete(value) => voidBerjalan saat gerak berhenti.

Semua props lain diteruskan ke elemen yang dirender, jadi className, style, dan event handler bekerja seperti biasa.

Web dan React Native

inline (bawaan saat dirender sebagai span) menganimasikan lebar dan tinggi; inline={false} mengisi lebar induk dan menganimasikan tinggi.

Di React Native, pertukaran inline mengukur konten baru dalam satu baris; gunakan inline={false} untuk konten yang membungkus.

Dipakai di contoh-contoh ini

Cari

Ketik untuk mencari dokumentasi.