Lebih cepat ke konten utama
Kembali ke plugin
@capgo/capacitor-transisi
Tutorial
@capgo/capacitor-transisi

Transisi

Tambahkan transisi halaman gaya Ionic dan sentuhan balik iOS tanpa UI Ionic

Demo

Demos Animasi WebP

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-style Capacitor
Alur Transisi React

Petunjuk

Tutorial tentang Transisi

Uji di Perangkat

Unduh aplikasi Capgo, kemudian scan kode QR code.

Tampilan transisi plugin QR code

Menggunakan @capgo/capacitor-transisi

@capgo/capacitor-transitions menambahkan transisi rute gaya Ionic ke aplikasi Capacitor tanpa menerima UI Ionic. Ini berjalan di lapisan web, menjaga router yang sudah ada, dan dapat mengaktifkan secara otomatis gerakan geser balik iOS di tepi hanya di dalam Capacitor iOS.

Install

npm install @capgo/capacitor-transitions

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

Daftar elemen

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 pembaruan 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, menjaga file tersebut di src/ adalah cukup. Untuk Next.js atau pengaturan TypeScript kustom, pastikan termasuk dengan tsconfig.json:

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

Mengaktifkan swipe back

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

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

Kamu juga bisa memaksa dari JavaScript:

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

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

Gerakan mengikuti jari selama transisi, kemudian menyelesaikan atau membatalkan ketika pengguna melepaskan. Tambahkan data-swipe-gesture-ignore pada tombol, slider, atau drawer yang tidak ingin memulai gerakan edge.

Pakai dengan navigasi asli

Install @capgo/native-navigation ketika lapisan asli harus menguasai navbar atau tabbar:

npm install @capgo/native-navigation
npx cap sync

Konfigurasi chrome asli, kemudian 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' },
  });
}

Pakai cap-content untuk tubuh halaman animasi dan variabel CSS native-navigasi 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 duplikat navbar asli sebagai header web yang bergerak. @capgo/native-navigation menggunakan bar asli; @capgo/capacitor-transitions menganimasikan 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, Panduan Awal untuk detail implementasi di Panduan Awal, Menggunakan @capgo/capacitor-aktivitas-hidup untuk kemampuan asli di Menggunakan @capgo/capacitor-aktivitas-hidup, @capgo/capacitor-aktivitas-hidup untuk detail implementasi di @capgo/capacitor-live-activities, dan Menggunakan @capgo/capacitor-video-player untuk kemampuan asli dalam Menggunakan @capgo/capacitor-video-player.