Saltare al contenuto principale
Torna ai plugin
@capgo/capacitor-transizioni
Tutorial
@capgo/capacitor-transizioni

Transizioni

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

Demo

Demonstrazioni animate WebP

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

Assetti di origine
Esempio di transizione di pagina React animata che mostra la navigazione in avanti e indietro in un shell di tipo Capacitor
Flusso di transizione di React

Guida

Tutorial sulle transizioni

Testare sul dispositivo

Scaricare l'app Capgo, poi scansione il codice QR code.

Link QR di anteprima del plugin delle transizioni code

Utilizza @capgo/capacitor-transizioni

@capgo/capacitor-transitions aggiunge le transizioni di route di stile Ionic alle app Capacitor senza adottare l'interfaccia utente di Ionic. Esegue la sua logica 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 nativi.

Installa

npm install @capgo/capacitor-transitions

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

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 route normale:

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

Il sottopercorso React include i tipi JSX per gli elementi personalizzati. Se TypeScript ancora segnala che cap-router-outlet non esiste su JSX.IntrinsicElements, aggiungi questo file:

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

For Vite, Create React App e la maggior parte degli app React con webpack, mantenere 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

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

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

Potete 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 a pulsanti, slider o menu che non dovrebbero attivare il gesto di bordo.

Utilizza 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 animata e per le variabili CSS native-navigazione 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 menu nativo come un'intestazione web mobile. @capgo/native-navigation conserva la barra nativa; @capgo/capacitor-transitions animare il contenuto della pagina sotto di essa.

Riferimento Completo

Continua da Usando @capgo/capacitor-transizioni

Se stai utilizzando Utilizzando @capgo/capacitor-transizioni per pianificare il comportamento dei media e dell'interfaccia nativa, connettilo con @capgo/capacitor-transizioni per i dettagli di implementazione in @capgo/capacitor-transizioni, Inizio dell'uso per i dettagli di implementazione in Inizio dell'uso, Utilizzo di @capgo/capacitor-attività-in-vivo per la capacità nativa in Utilizzo di @capgo/capacitor-attività-in-vivo, @capgo/capacitor-attività-in-vivo per i dettagli di implementazione in @capgo/capacitor-attività-in-vivo, e Utilizzo di @capgo/capacitor-lettore-di-video per la capacità nativa in Utilizzo di @capgo/capacitor-lettore-di-video.