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

Transiciones

Añada transiciones de página estilo Ionic y gestos de retroceso de iOS con swipe sin la interfaz de usuario de Ionic

Demo

Demos animados de WebP

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

Descargue la aplicación Capgo, luego escane 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. Corre en la capa web, mantiene su 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 un paso de sincronización nativa porque el paquete no agrega plugin nativo code.

Registrar los elementos

import '@capgo/capacitor-transitions';

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

Conectarlo a un router

Establece la dirección de transición antes de tu actualización de 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.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 retroceso por deslizamiento

Usa swipe-gesture="auto" para habilitar el gesto solo cuando Capacitor informa un entorno de 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 poseer el navbar o tabbar:

npm install @capgo/native-navigation
npx cap sync

Configurar el navegador nativo, luego mantener las transiciones enfocadas en las páginas 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 página animado y variables CSS de navegación nativa 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 duplique el navbar nativo como encabezado web móvil. @capgo/native-navigation mantiene la barra nativa; @capgo/capacitor-transitions animar el contenido de 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 nativos, conecta con @capgo/capacitor-transiciones para los detalles de implementación en @capgo/capacitor-transiciones, Inicio para los detalles de implementación en Inicio, 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-videos para la capacidad nativa en Usando @capgo/capacitor-reproductor-de-videos.