Saltar al contenido principal
@capgo/capacitor-transitions UI y Sistema Código abierto

Transiciones plugin Capacitor

Añade transiciones de página estilo Ionic y gestos de swipe-back en iOS sin usar Ionic UI

Instalar

bun add @capgo/capacitor-transitions bunx cap sync
npm, pnpm o yarn
  • npm install @capgo/capacitor-transitions
  • pnpm add @capgo/capacitor-transitions
  • yarn add @capgo/capacitor-transitions

Demo

Demos de transiciones

Un flujo de React router que muestra transiciones de página Capacitor estilo iOS mediante una demo animada en WebP.

Assets de origen
Demo de transiciones de página en React con navegación hacia adelante y atrás en un shell estilo Capacitor
Flujo de transiciones en React

Guía

Cómo usar Transitions en Capacitor

Probar en el dispositivo

Descarga la app Capgo y escanea el QR code.

QR de vista previa del plugin Transitions code

Uso de @capgo/capacitor-transitions

@capgo/capacitor-transitions añade transiciones de ruta al estilo Ionic a apps de Capacitor sin adoptar Ionic UI. Se ejecuta en la capa web, mantiene tu router actual y puede activar automáticamente el gesto swipe-back desde el borde en iOS solo dentro de iOS nativo de Capacitor.

Instalar

npm install @capgo/capacitor-transitions

No hay un paso de sync nativo porque el paquete no añade un plugin nativo de 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

Define la dirección de la transición antes de actualizar la ruta:

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

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

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

Ejemplo en 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 los tipos JSX para los custom elements. Si TypeScript sigue indicando que cap-router-outlet no existe en JSX.IntrinsicElements, añade este archivo:

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

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

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

Activar deslizamiento hacia atrás

Usa swipe-gesture="auto" para habilitar el gesto solo cuando Capacitor informe de un runtime 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 y se completa o cancela cuando el usuario lo suelta. Añade data-swipe-gesture-ignore en botones, deslizadores o cajones que no deben iniciar el gesto de borde.

Usar con navegación nativa

Instalar @capgo/native-navigation cuando la capa nativa deba encargarse de la navbar o la tabbar:

npm install @capgo/native-navigation
npx cap sync

Configura el chrome nativo y mantén las transiciones centradas 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 animado de la página y las variables CSS de native-navigation para 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);
}

No dupliques la navbar nativa como un header web en movimiento. @capgo/native-navigation mantiene la barra nativa; @capgo/capacitor-transitions anima el contenido de la página debajo de ella.

Referencia completa

Continuar desde Uso de @capgo/capacitor-transitions

Si estás usando Uso de @capgo/capacitor-transitions para planificar el comportamiento de los medios nativos y la interfaz, conéctalo con @capgo/capacitor-transitions para el detalle de la implementación en @capgo/capacitor-transitions, Primeros pasos para los detalles de implementación en Primeros pasos, Uso de @capgo/capacitor-live-activities para la capacidad nativa en Uso de @capgo/capacitor-live-activities, @capgo/capacitor-live-activities para el detalle de implementación en @capgo/capacitor-live-activities, y Uso de @capgo/capacitor-video-player para la capacidad nativa en Uso de @capgo/capacitor-video-player.

FAQ

Preguntas frecuentes del plugin Transitions

¿Cómo instalo el plugin Transitions en una app de Capacitor?

Ejecuta &quot;bun add @capgo/capacitor-transitions&quot; (o &quot;npm install @capgo/capacitor-transitions&quot;), luego ejecuta &quot;bunx cap sync&quot; para que los proyectos de iOS y Android incluyan el code nativo. Impórtalo desde &quot;@capgo/capacitor-transitions&quot; en el code de tu app.

¿Funciona @capgo/capacitor-transitions con React, Vue y Angular?

Sí. Transitions es un paquete de Capacitor, así que funciona con cualquier framework web que corra dentro de Capacitor, incluidos Ionic, React, Vue, Angular, Svelte y JavaScript puro.

¿Qué versión de Capacitor soporta @capgo/capacitor-transitions?

Los plugins de Capgo siguen la versión mayor de Capacitor: usa la versión mayor del plugin que coincida con la versión mayor de tu Capacitor (por ejemplo, el plugin v8 con Capacitor 8). La tabla de compatibilidad del README de GitHub lista las versiones mantenidas.

¿Es @capgo/capacitor-transitions gratuito y open source?

Sí. El código fuente de code es público en GitHub: https://github.com/Cap-go/capacitor-transitions/ y el paquete se instala gratis desde npm. Se agradecen los reportes de bugs y pull requests.

¿Puedo actualizar code que usa Transitions sin una revisión de la App Store?

Instalar o actualizar el plugin cambia el code nativo, así que requiere un nuevo build para la tienda. Después, los cambios de JavaScript, HTML y CSS que llamen al plugin se pueden publicar al instante con las live updates de Capgo.

Publica cambios en Transitions sin esperar la revisión de la app

Una vez que el plugin esté en tu store build, Capgo live updates envía tus cambios de JavaScript, HTML y CSS a los usuarios en minutos.

Empieza con Capgo