Langkapi ke konten utama

Demo

Demo WebP Animasi

A React router flow showing iOS-style Capacitor page transitions as an animated WebP demo.

Sumber Aset
Demo Transisi Halaman React yang Menampilkan Navigasi Maju dan Mundur dalam Shell Capacitor-Style
Aliran Transisi React

Panduan

Tutorial Transisi

Test di perangkat

Unduh aplikasi Capgo terlebih dahulu, kemudian scan kode QR code.

Menggunakan @code/__CAPGO_KEEP_1__-transisi

menambahkan transisi jalur Ionic ke aplikasi capgo tanpa mengadopsi antarmuka UI Ionic. Ini berjalan di lapisan web, menjaga router yang sudah ada, dan dapat mengaktifkan secara otomatis gestur gesek ke kiri di iOS hanya di dalam capacitor iOS asli.

@capgo/capacitor-transitions adds Ionic-style route transitions to Capacitor apps without adopting Ionic UI. It runs in the web layer, keeps your existing router, and can auto-enable an iOS edge swipe-back gesture only inside native Capacitor iOS.

Tidak ada langkah sinkron native karena paket tidak menambahkan plugin native __CAPGO_KEEP_0__.

npm install @capgo/capacitor-transitions

There is no native sync step because the package does not add native plugin code.

Mendaftarkan elemen-elemen

import '@capgo/capacitor-transitions';

Wrap 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

Set arah transisi sebelum memperbarui rute normal:

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 termasuk tipe JSX untuk elemen kustom. 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, cukup menjaga file tersebut di src/ Cukup pastikan file tersebut dimasukkan oleh tsconfig.json:

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

Mengaktifkan swipe back

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

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

Anda juga dapat memaksanya dari JavaScript:

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

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

Gerakan mengikuti jari selama transisi, kemudian diselesaikan atau dibatalkan ketika pengguna melepaskannya. Tambahkan data-swipe-gesture-ignore pada tombol, slider, atau drawer yang tidak boleh memulai gerakan edge.

Gunakan bersama navigasi native

Pasang @capgo/native-navigation ketika layer native harus menguasai navbar atau tabbar:

npm install @capgo/native-navigation
npx cap sync

Konfigurasi chrome native, kemudian tetapkan transisi fokus 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 tubuh 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 mengingatkan bar native; @capgo/capacitor-transitions menggerakkan konten halaman di bawahnya.

Referensi Lengkap

Teruskan dari Menggunakan @capgo/capacitor-transisi

Jika Anda menggunakan Menggunakan @capgo/capacitor-transisi untuk merencanakan perilaku media dan antarmuka asli, hubungkannya dengan @capgo/capacitor-transisi untuk detail implementasi di @capgo/capacitor-transisi, Mulai untuk detail implementasi di Getting Started, Menggunakan @capgo/capacitor-live-aktivitas untuk kemampuan asli di Menggunakan @capgo/capacitor-live-aktivitas, @capgo/capacitor-live-aktivitas untuk detail implementasi di @capgo/capacitor-live-aktivitas, dan Menggunakan @capgo/capacitor-player-video untuk kemampuan asli di Menggunakan @capgo/capacitor-player-video.