Vai al contenuto principale
Torna ai plugin
@capgo/capacitor-transizioni
Guida
@capgo/capacitor-transizioni

Transizioni

Aggiungi transizioni di pagina dello stile Ionic e gesti di swipe-back iOS senza l'interfaccia UI di Ionic

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 scansa il codice QR code.

Link QR di anteprima del plugin delle transizioni code

Utilizza @capgo/capacitor-transizioni

@capgo/capacitor-transitions aggiunge transizioni di route di stile Ionic alle app Capacitor senza adottare l'interfaccia utente di Ionic. Esegue il rendering nel layer web, mantiene il tuo 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 passaggio 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 della 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 i tipi JSX personalizzati 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 lo swipe indietro

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

<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 menu che non dovrebbero attivare il gesto di bordo.

Usa con navigazione nativa

Installa @capgo/native-navigation quando il layer nativo dovrebbe gestire 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 la barra di navigazione nativa come intestazione web in movimento. @capgo/native-navigation mantiene la barra nativa; @capgo/capacitor-transitions animazione del contenuto della pagina sotto di essa.

Riferimento Completo

Continua da Utilizzare @capgo/capacitor-transizioni

Se stai utilizzando Utilizzare @capgo/capacitor-transizioni per pianificare il comportamento dei media e dell'interfaccia nativa, collegarla con @capgo/capacitor-transizioni per il dettaglio di implementazione in @capgo/capacitor-transizioni, Iniziare per il dettaglio di implementazione in Iniziare, Utilizzare @capgo/capacitor-attività-viva per la capacità nativa in Utilizzare @capgo/capacitor-attività-viva, @capgo/capacitor-attività-viva per il dettaglio di implementazione in @capgo/capacitor-attività-viva, e Utilizzare @capgo/capacitor-lettore-video per la capacità nativa in Utilizzare @capgo/capacitor-lettore-video.