Saltar al contenido principal

Demostración

Demos de WebP animados

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

Recursos de origen
Demostración de transición de página React animada que muestra navegación hacia adelante y hacia atrás en una caja estilo Capacitor
Flujo de transición de React

Guía

Tutoría sobre Transiciones

Prueba en dispositivo

Descarga la aplicación Capgo, luego escanea el código QR code.

Enlace QR de vista previa del plugin de transiciones code

Usando @capgo/capacitor-transiciones

@capgo/capacitor-transitions Agrega transiciones de ruta estilo Ionic a las aplicaciones Capacitor sin adoptar la interfaz de usuario de Ionic. Se ejecuta en la capa web, mantiene tu router existente y puede habilitar automáticamente un gesto de retroceso de borde de iOS solo dentro de la Capacitor nativa iOS.

Instalar

npm install @capgo/capacitor-transitions

No hay paso de sincronización nativa porque el paquete no agrega plugin nativo code.

Registre los elementos

import '@capgo/capacitor-transitions';

Envuelve tus páginas

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

Conéctalo a un router

Establece la dirección de transición antes de actualizar tu ruta normal:

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

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

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

Ejemplo de 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 ruta sub de React incluye tipificaciones JSX para los elementos personalizados. Si TypeScript aún informa que cap-router-outlet no existe en JSX.IntrinsicElementsagrega este archivo:

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

Para Vite, Create React App y la mayoría de las aplicaciones de React con webpack, mantener ese archivo bajo src/ es suficiente. Para Next.js o configuraciones de TypeScript personalizadas, asegúrate de que esté incluido por tsconfig.json:

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

Habilita el deslizamiento hacia atrás

Usa swipe-gesture="auto" para habilitar el gesto solo cuando Capacitor informa un tiempo de ejecución nativo de iOS:

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

También puedes forzarlo desde JavaScript:

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

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

El gesto sigue el dedo durante la transición, luego completa o cancela cuando el usuario libera. Agrega data-swipe-gesture-ignore en botones, deslizadores o cajones que no deben iniciar el gesto de borde.

Usa con navegación nativa

Instala @capgo/native-navigation cuando el capa nativa debe ser dueña de la barra de navegación o de la pestaña:

npm install @capgo/native-navigation
npx cap sync

Configura el navegador nativo, luego mantén las transiciones enfocadas en las páginas de 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 para el cuerpo de página animado y las variables CSS de navegación nativa para los márgenes:

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

No dupliques la barra de navegación nativa como un encabezado web móvil. @capgo/native-navigation mantiene la barra nativa; @capgo/capacitor-transitions animar el contenido de la página debajo de él.

Referencia Completa

Sigue adelante desde Usando @capgo/capacitor-transiciones

Si estás utilizando Usando @capgo/capacitor-transiciones para planificar el comportamiento de medios nativos e interfaces, conecta con @capgo/capacitor-transiciones para el detalle de implementación en @capgo/capacitor-transiciones Inicio para el detalle de implementación en Getting Started, Usando @capgo/capacitor-actividades-en-vivo para la capacidad nativa en Usando @capgo/capacitor-actividades-en-vivo, @capgo/capacitor-actividades-en-vivo para el detalle de implementación en @capgo/capacitor-actividades-en-vivo, y Usando @capgo/capacitor-reproductor-de-videos para la capacidad nativa en Usando @capgo/capacitor-reproductor-de-videos.