Saltar al contenido principal
Volver a plugins
@capgo/capacitor-transiciones
Tutorial
@capgo/capacitor-transiciones

Transiciones

Agregar transiciones de página estilo Ionic y gestos de retroceso de iOS sin interfaz de usuario de Ionic

Demo

Demos de WebP animados

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

Recursos de origen
Demo de transición de página React animada que muestra navegación hacia adelante y hacia atrás en un contenedor estilo Capacitor
Flujo de transición de React

Guía

Tutoría sobre transiciones

Probar en dispositivo

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

Vista previa del complemento de transiciones QR code

Usando @capgo/capacitor-transiciones

@capgo/capacitor-transitions agrega transiciones de ruta estilo Ionic a 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 iOS nativa.

Instalar

npm install @capgo/capacitor-transitions

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

Registra 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 la 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 subruta 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"]
}

Activar deslizar hacia atrás

Usar 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 al dedo durante la transición, luego completa o cancela cuando el usuario libera. Agrega data-swipe-gesture-ignore a los botones, deslizadores o cajones que no deben iniciar el gesto de borde.

Usar con navegación nativa

Instalar @capgo/native-navigation cuando el capa nativa debe ser dueña de la barra de navegación o 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' },
  });
}

Usar cap-content para el cuerpo de la página animada 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 duplique la barra de navegación nativa como un encabezado web en movimiento. @capgo/native-navigation mantiene la barra nativa; @capgo/capacitor-transitions animar el contenido de la página debajo de ella.

Referencia Completa

Sigue adelante desde Usando @capgo/capacitor-transiciones

Si estás utilizando Usando @capgo/capacitor-transiciones para planificar el comportamiento de medios y interfaz nativa, conecta con @capgo/capacitor-transiciones para el detalle de implementación en @capgo/capacitor-transiciones, Comenzar para el detalle de implementación en Comenzar, 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.