Langsung ke konten utama
@capgo/capacitor-transitions UI & Sistem Open source

Transisi plugin Capacitor

Tambahkan transisi halaman ala Ionic dan gesture edge swipe-back iOS tanpa Ionic UI

Instal

bun add @capgo/capacitor-transitions bunx cap sync
npm, pnpm atau yarn
  • npm install @capgo/capacitor-transitions
  • pnpm add @capgo/capacitor-transitions
  • yarn add @capgo/capacitor-transitions

Demo

Demo transisi

Alur React router yang menampilkan transisi halaman Capacitor bergaya iOS sebagai demo WebP animasi.

Aset sumber
Demo transisi halaman React animasi yang menunjukkan navigasi maju dan mundur dalam shell bergaya Capacitor
Alur transisi React

Panduan

Cara menggunakan Transitions di Capacitor

Tes di perangkat

Download aplikasi Capgo, lalu scan QR code.

Pratinjau plugin Transitions: QR code

Menggunakan @capgo/capacitor-transitions

@capgo/capacitor-transitions menambahkan transisi rute ala Ionic ke aplikasi Capacitor tanpa harus mengadopsi Ionic UI. Berjalan di web layer, tetap memakai router yang sudah ada, dan bisa otomatis mengaktifkan gesture swipe-back dari tepi layar iOS hanya di dalam Capacitor iOS native.

Instal

npm install @capgo/capacitor-transitions

Tidak ada langkah sinkronisasi native karena paket ini tidak menambahkan plugin native code.

Daftarkan elemennya

import '@capgo/capacitor-transitions';

Bungkus halaman Anda

<cap-router-outlet platform="auto" swipe-gesture="auto">
  <cap-page>
    <cap-header slot="header">
      <h1>Inbox</h1>
    </cap-header>

    <cap-content slot="content">
      <button>Open message</button>
    </cap-content>

    <cap-footer slot="footer">
      <nav>Tabs</nav>
    </cap-footer>
  </cap-page>
</cap-router-outlet>

Hubungkan ke router

Atur arah transisi sebelum update rute normal Anda:

import { setDirection } from '@capgo/capacitor-transitions/react';

setDirection('forward');
router.push('/message/42');

setDirection('back');
router.back();

Contoh React

import { useEffect, useRef } from 'react';
import { useNavigate } from 'react-router-dom';
import { initTransitions, setDirection, setupPage, setupRouterOutlet } from '@capgo/capacitor-transitions/react';
import '@capgo/capacitor-transitions';

initTransitions({ platform: 'auto' });

export function AppShell() {
  const outletRef = useRef<HTMLElement>(null);

  useEffect(() => {
    if (!outletRef.current) return;
    setupRouterOutlet(outletRef.current, { platform: 'auto', swipeGesture: 'auto' });
  }, []);

  return <cap-router-outlet ref={outletRef}>{/* routes */}</cap-router-outlet>;
}

export function InboxPage() {
  const navigate = useNavigate();
  const pageRef = useRef<HTMLElement>(null);

  useEffect(() => {
    if (!pageRef.current) return;
    return setupPage(pageRef.current);
  }, []);

  return (
    <cap-page ref={pageRef}>
      <cap-header slot="header">
        <h1>Inbox</h1>
      </cap-header>
      <cap-content slot="content">
        <button
          onClick={() => {
            setDirection('forward');
            navigate('/message/42');
          }}
        >
          Open message
        </button>
      </cap-content>
    </cap-page>
  );
}

Subpath React menyertakan typing JSX untuk custom element. Jika TypeScript masih melaporkan bahwa cap-router-outlet tidak ada pada JSX.IntrinsicElements, tambahkan file ini:

// src/capgo-transitions.d.ts
import '@capgo/capacitor-transitions/react';

Untuk Vite, Create React App, dan sebagian besar aplikasi React webpack, menyimpan file tersebut di bawah src/ sudah cukup. Untuk setup Next.js atau TypeScript kustom, pastikan ini disertakan oleh tsconfig.json:

{
  "include": ["src", "src/capgo-transitions.d.ts"]
}

Aktifkan swipe back

Gunakan swipe-gesture="auto" untuk mengaktifkan gesture hanya ketika Capacitor melaporkan runtime iOS native:

<cap-router-outlet swipe-gesture="auto"></cap-router-outlet>

Anda juga bisa memaksanya dari JavaScript:

const outlet = document.querySelector('cap-router-outlet');

outlet?.setSwipeGesture(true);
outlet?.setSwipeGesture(false);
outlet?.setSwipeGesture('auto');

Gestur mengikuti jari selama transisi, lalu diselesaikan atau dibatalkan saat pengguna melepas. Tambahkan data-swipe-gesture-ignore pada tombol, slider, atau drawer yang tidak boleh memulai gesture tepi.

Gunakan dengan navigasi native

Instal @capgo/native-navigation ketika layer native harus memiliki navbar atau tabbar:

npm install @capgo/native-navigation
npx cap sync

Konfigurasi chrome native, lalu fokuskan transisi pada halaman WebView:

import { NativeNavigation } from '@capgo/native-navigation';
import { setDirection } from '@capgo/capacitor-transitions/react';
import { router } from './router';

await NativeNavigation.configure({
  contentInsetMode: 'css',
});

await NativeNavigation.setNavbar({
  title: 'Inbox',
  backButton: { visible: false },
});

await NativeNavigation.addListener('navbarBack', () => {
  setDirection('back');
  router.back();
});

async function openMessage(id: string) {
  setDirection('forward');
  router.push(`/message/${id}`);

  await NativeNavigation.setNavbar({
    title: 'Message',
    backButton: { visible: true, title: 'Inbox' },
  });
}

Gunakan cap-content untuk body halaman animasi dan variabel CSS navigasi native untuk insets:

<cap-router-outlet platform="auto" swipe-gesture="auto">
  <cap-page>
    <cap-content slot="content" fullscreen>
      <main class="native-page">Inbox content</main>
    </cap-content>
  </cap-page>
</cap-router-outlet>
.native-page {
  padding-top: var(--cap-native-navigation-top);
  padding-bottom: var(--cap-native-navigation-bottom);
}

Jangan duplikasi navbar native sebagai header web yang bergerak. @capgo/native-navigation menjaga bar tetap native; @capgo/capacitor-transitions menganimasikan konten halaman di bawahnya.

Referensi Lengkap

Lanjutkan dari Menggunakan @capgo/capacitor-transitions

Jika Anda menggunakan Menggunakan @capgo/capacitor-transitions untuk merencanakan perilaku media dan antarmuka native, hubungkan dengan @capgo/capacitor-transitions untuk detail implementasi di @capgo/capacitor-transitions, Panduan Memulai untuk detail implementasi di Getting Started, Menggunakan @capgo/capacitor-live-activities untuk kemampuan native di Menggunakan @capgo/capacitor-live-activities, @capgo/capacitor-live-activities untuk detail implementasi di @capgo/capacitor-live-activities, dan Menggunakan @capgo/capacitor-video-player untuk kapabilitas native saat menggunakan @capgo/capacitor-video-player.

FAQ

FAQ plugin Transitions

Bagaimana cara install plugin Transitions di aplikasi Capacitor?

Jalankan "bun add @capgo/capacitor-transitions" (atau "npm install @capgo/capacitor-transitions"), lalu jalankan "bunx cap sync" agar proyek iOS dan Android mendeteksi code native. Impor dari "@capgo/capacitor-transitions" di code aplikasi Anda.

Apakah @capgo/capacitor-transitions bisa digunakan dengan React, Vue, dan Angular?

Ya. Transitions adalah package Capacitor, jadi bisa dipakai dengan framework web apa pun yang berjalan di dalam Capacitor, termasuk Ionic, React, Vue, Angular, Svelte, dan JavaScript biasa.

Versi Capacitor mana yang didukung @capgo/capacitor-transitions?

Plugin Capgo mengikuti versi mayor Capacitor: gunakan versi mayor plugin yang sesuai dengan versi mayor Capacitor Anda (contoh: plugin v8 dengan Capacitor 8). Tabel kompatibilitas di README GitHub mencantumkan versi yang masih di-maintain.

Apakah @capgo/capacitor-transitions gratis dan open source?

Ya. Source code tersedia untuk publik di GitHub di https://github.com/Cap-go/capacitor-transitions/ dan package ini gratis di-install dari npm. Laporan bug dan pull request sangat diterima.

Bisakah saya update code yang memakai Transitions tanpa melalui review App Store?

Instalasi atau upgrade plugin akan mengubah native code, jadi butuh build store baru. Setelah itu, perubahan JavaScript, HTML, dan CSS yang memanggil plugin bisa langsung dikirim lewat live updates Capgo.

Rilis perubahan Transitions tanpa menunggu review aplikasi

Setelah plugin ada di build store Anda, live updates Capgo akan mengirim perubahan JavaScript, HTML, dan CSS ke pengguna dalam hitungan menit.

Mulai dengan Capgo