Menggunakan @capgo/capacitor-transisi
@capgo/capacitor-transitions menambahkan transisi jalur Ionic ke aplikasi Capacitor tanpa menerima UI Ionic. Ini berjalan di lapisan web, menjaga router yang ada, dan dapat mengaktifkan secara otomatis gestur gesek samping iOS hanya di dalam Capacitor iOS native.
Pasang
npm install @capgo/capacitor-transitions
Tidak ada langkah sinkron native karena paket ini tidak menambahkan plugin native code.
Daftarkan elemen-elemen
import '@capgo/capacitor-transitions';
Bungkus halaman-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 Anda 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-elemen kustom. Jika TypeScript masih melaporkan bahwa cap-router-outlet tidak ada pada JSX.IntrinsicElementsTambahkan 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/ sudah cukup. Untuk Next.js atau pengaturan TypeScript kustom, pastikan file tersebut dimasukkan oleh tsconfig.json:
{
"include": ["src", "src/capgo-transitions.d.ts"]
}
aktifkan swipe back
Menggunakan 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');
Gesang mengikuti jari selama transisi, kemudian selesai atau dibatalkan ketika pengguna melepaskannya. Tambahkan data-swipe-gesture-ignore ke tombol, slider, atau drawer yang tidak boleh memulai gerakan edge.
Menggunakan dengan navigasi native
Install @capgo/native-navigation ketika layer native harus menguasai navbar atau tabbar:
npm install @capgo/native-navigation
npx cap sync
Mengonfigurasi 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' },
});
}
Menggunakan 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 native sebagai kepala web yang bergerak. @capgo/native-navigation menjaga bar native; @capgo/capacitor-transitions animasi konten halaman di bawahnya.
Referensi Lengkap
- GitHub: https://github.com/Cap-go/capacitor-transisi/
- Dokumen: /docs/plugins/transisi/
Teruskan dari Menggunakan @capgo/capacitor-transisi
Jika Anda menggunakan Menggunakan @capgo/capacitor-transisi untuk merencanakan perilaku media dan antarmuka native, hubungkannya dengan @capgo/capacitor-transisi untuk detail implementasi di @capgo/capacitor-transisi, Mulai Menggunakan untuk detail implementasi di Mulai, Menggunakan @capgo/capacitor-aktivitas-hidup untuk kemampuan asli di Menggunakan @capgo/capacitor-aktivitas-hidup, @capgo/capacitor-aktivitas-hidup untuk detail implementasi di @capgo/capacitor-aktivitas-hidup, dan Menggunakan @capgo/capacitor-pemain-video untuk kemampuan asli di Menggunakan @capgo/capacitor-pemain-video.