Saltare al contenuto principale

Demo

Demos WebP animate

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

Risorse di origine
Demo di transizione di pagina React animate che mostra la navigazione avanti e indietro in un guscio di tipo Capacitor
Flusso di transizione React

Guida

Tutorial sulle transizioni

Testare sul dispositivo

Scarica l'app Capgo, poi scansione il QR code.

Link QR di anteprima del plugin Transizioni code

Utilizza @capgo/capacitor-transizioni

@capgo/capacitor-transitions Aggiunge transizioni di route di tipo Ionic alle app Capacitor senza adottare l'interfaccia utente di Ionic. Esegue il rendering nel layer web, mantiene il router esistente e può abilitare automaticamente un gesto di swipe indietro per l'edge solo all'interno di Capacitor iOS nativo.

Installa

npm install @capgo/capacitor-transitions

Non esiste un passo di sincronizzazione nativa perché il pacchetto non aggiunge plugin nativo code.

Registra gli elementi

import '@capgo/capacitor-transitions';

Avvolgi le tue pagine

<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>

Connettilo a un router

Imposta la direzione di transizione prima dell'aggiornamento della tua normale rotta:

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

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

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

Esempio 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>
  );
}

La sottopagina React include le annotazioni JSX per gli elementi personalizzati. Se TypeScript ancora segnala che cap-router-outlet non esiste su JSX.IntrinsicElementsAggiungi questo file:

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

Per Vite, Create React App e la maggior parte degli app React con webpack, tenere quel file sotto src/ è sufficiente. Per Next.js o impostazioni TypeScript personalizzate, assicurati che sia incluso da tsconfig.json:

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

Abilita il ritorno a schermo laterale

Usa swipe-gesture="auto" per abilitare il gesto solo quando Capacitor segnala un runtime nativo iOS:

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

Puoi anche forzarlo da JavaScript:

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

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

Il gesto segue il dito durante la transizione, poi completa o annulla quando l'utente rilascia. Aggiungi data-swipe-gesture-ignore su pulsanti, slider o dischi che non dovrebbero attivare il gesto di bordo.

Usa con navigazione nativa

Installa @capgo/native-navigation quando il layer nativo dovrebbe possedere il navbar o tabbar:

npm install @capgo/native-navigation
npx cap sync

Configura il chrome nativo, poi mantieni le transizioni focalizzate sulle pagine 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' },
  });
}

Usa cap-content per il corpo della pagina animato e le variabili CSS di navigazione nativa per gli insetti:

<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);
}

Non duplicare il navbar nativo come un'intestazione web mobile. @capgo/native-navigation mantiene la barra nativa; @capgo/capacitor-transitions animazione della pagina contenuto sotto di essa.

Riferimento Completo

Continua da Utilizzare @capgo/capacitor-transizioni

Se stai utilizzando Utilizzare @capgo/capacitor-transizioni per pianificare il comportamento dei media nativi e dell'interfaccia, collega con @capgo/capacitor-transizioni per i dettagli di implementazione in @capgo/capacitor-transizioni Iniziare per i dettagli di implementazione in Getting Started, Usando @capgo/capacitor-live-attività per la capacità nativa in Usando @capgo/capacitor-live-attività, @capgo/capacitor-live-attività per i dettagli di implementazione in @capgo/capacitor-live-attività, e Usando @capgo/capacitor-player-video per la capacità nativa in Usando @capgo/capacitor-player-video.