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

Transiciones

Agregar transiciones de página estilo Ionic y gestos de retroceso de iOS con borde de swipe sin interfaz de Ionic

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

Tutoriales sobre transiciones

Prueba en dispositivo

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

Vista previa del plugin de transiciones QR 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. Corre 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 paso de sincronización nativa porque el paquete no agrega 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 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>
  );
}

El subcaminho de React incluye tipificaciones JSX para los elementos personalizados. Si TypeScript aún informa que cap-router-outlet No existe en JSX.IntrinsicElements, agrega 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"]
}

Habilitar el deslizamiento 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 lo 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 barra de pestañas:

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 recuadros de inserción:

<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 animanota 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 nativo de medios y interfaz, conecta con @capgo/capacitor-transiciones para los detalles de implementación en @capgo/capacitor-transiciones Iniciación para los detalles 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 los detalles de implementación en @capgo/capacitor-actividades-en-vivo, y Usando @capgo/capacitor-reproductor-de-video para la capacidad nativa en Usando @capgo/capacitor-reproductor-de-video.