Passer au contenu principal
Retour aux plugins
@capgo/capacitor-transitions
Tutoriel
@capgo/capacitor-transitions

Transitions

Ajoutez des transitions de page Ionic et des gestes de retour par balayage iOS sans interface utilisateur Ionic

Démonstration

Démonstrations WebP animées

Un flux de React router montrant des transitions de page iOS-style Capacitor sous forme de démonstration WebP animée.

Actifs source
Démonstration de transition de page React animée montrant la navigation vers l'avant et l'arrière dans un shell de style Capacitor
Flux de transition React

Guide

Guide de tutoriel sur les transitions

Tester sur appareil

Téléchargez l'application Capgo, puis scannez le code QR code.

Prévisualisation du code QR du plugin de transitions code

En utilisant @capgo/capacitor-transitions

@capgo/capacitor-transitions ajoute des transitions de route Ionic à vos applications Capacitor sans adopter l'interface utilisateur Ionic. Il fonctionne dans la couche web, conservez votre routeur existant et peut activer automatiquement un geste de retour par swipe sur l'iPhone uniquement à l'intérieur de l'Capacitor iOS natif.

Installation

npm install @capgo/capacitor-transitions

Il n'y a pas d'étape de synchronisation native car le package ne rajoute pas de plugin natif code.

Enregistrer les éléments

import '@capgo/capacitor-transitions';

Envelopper vos pages

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

Connectez-l’à un navigateur

Définissez la direction de transition avant la mise à jour de votre route normale :

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

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

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

Exemple 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 sous-chemin React inclut les déclarations de type JSX pour les éléments personnalisés. Si TypeScript signale encore que cap-router-outlet n'existe pas sur JSX.IntrinsicElements, ajoutez ce fichier :

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

Pour Vite, Create React App et la plupart des applications React webpack, garder ce fichier sous src/ suffit. Pour Next.js ou les configurations TypeScript personnalisées, assurez-vous qu'il est inclus par tsconfig.json:

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

Activer le balayage vers l'arrière

Utiliser swipe-gesture="auto" pour activer le geste uniquement lorsque Capacitor signale un runtime iOS natif :

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

Vous pouvez également le forcer depuis JavaScript :

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

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

Le geste suit le doigt pendant la transition, puis se termine ou se supprime lorsque l'utilisateur relâche. Ajoutez data-swipe-gesture-ignore sur les boutons, les curseurs ou les tiroirs qui ne doivent pas déclencher le geste de bord.

Utiliser avec la navigation native

Installer @capgo/native-navigation lorsque la couche native doit posséder le navbar ou le tabbar :

npm install @capgo/native-navigation
npx cap sync

Configurez le chrome natif, puis maintenez les transitions centrées sur les pages 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' },
  });
}

Utiliser cap-content pour le corps de page animé et les variables CSS de navigation native pour les 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);
}

N'ajoutez pas la barre de navigation native en tant que tête web en mouvement. @capgo/native-navigation garde la barre native; @capgo/capacitor-transitions anime le contenu de la page sous elle.

Référence complète

Continuez à partir de l'utilisation de @capgo/capacitor-transitions

Si vous utilisez L'utilisation de @capgo/capacitor-transitions pour planifier le comportement des médias et de l'interface natives, connectez-l’avec @capgo/capacitor-transitions pour le détail d'implémentation dans @capgo/capacitor-transitions, Démarrage pour le détail d'implémentation dans Démarrage, Utilisation de @capgo/capacitor-live-activités pour la capacité native dans Utilisation de @capgo/capacitor-live-activités, @capgo/capacitor-live-activités pour le détail d'implémentation dans @capgo/capacitor-live-activités, et Utilisation de @capgo/capacitor-video-joueur pour la capacité native dans Utilisation de @capgo/capacitor-video-joueur.