メインコンテンツにジャンプ
プラグインに戻る
@capgo/capacitor-transitions
チュートリアル
@capgo/capacitor-transitions

ページ遷移

イオニックUIを必要とせずに、イオニックスタイルのページ遷移とiOSエッジスワイプバックジェスチャーを追加します。

デモ

WebP アニメーション デモ

iOS スタイルの Capacitor ページ遷移を示す React ルーター フロー

ソース アセット
React スタイルの Capacitor ページ遷移を示すアニメーション
React ページ遷移フロー

ガイド

トランジションのチュートリアル

デバイスでテスト

Download the Capgo app, then scan the QR code.

プラグインのプレビューQRコード code

@capgo/capacitor-トランジションを使用します。

@capgo/capacitor-transitions adds Ionic-style route transitions to Capacitor apps without adopting Ionic UI. It runs in the web layer, keeps your existing router, and can auto-enable an iOS edge swipe-back gesture only inside native Capacitor iOS.

インストール

npm install @capgo/capacitor-transitions

ネイティブの同期ステップはありません。パッケージはネイティブ プラグイン code を追加していないためです。

要素を登録する

import '@capgo/capacitor-transitions';

ページを Wrap する

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

ルーターに接続する

通常のルート更新前に、トランジションの方向を設定する:

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

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

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

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

React の子パスには、カスタム要素用の JSX の型定義が含まれています。TypeScript が、 cap-router-outlet が存在しないと報告する場合、 JSX.IntrinsicElementsを追加してください。

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

Vite、Create React App、およびほとんどの webpack React アプリでは、そのファイルを src/ の下に保つだけで十分です。Next.js またはカスタムの TypeScript の設定の場合、含まれていることを確認してください。 tsconfig.json:

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

スワイプバックを有効にする

使用 swipe-gesture="auto" CapacitorがiOSネイティブランタイムを報告する場合にのみジェスチャーを有効にするには

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

JavaScriptから強制することもできます:

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

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

ジェスチャーはトランジション中、指を追跡し、ユーザーがリリースすると完了またはキャンセルします。追加 data-swipe-gesture-ignore ボタン、スライダー、ドロワーに追加して、エッジジェスチャーを開始しないようにします。

ネイティブナビゲーションと組み合わせて使用

インストール @capgo/native-navigation ネイティブレイヤーがナビゲーションバーまたはタブバーを所有する場合にインストールする:

npm install @capgo/native-navigation
npx cap sync

ネイティブのChromeを設定し、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' },
  });
}

使用 cap-content アニメーションページボディとネイティブナビゲーションCSS変数のインセットに使用

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

Nativeナビゲーションバーを複製して動くWebヘッダーとして使用しないでください。 @capgo/native-navigation バーはネイティブで保持されます。 @capgo/capacitor-transitions バーの下のページコンテンツをアニメーションします。

フルリファレンス

Keep going from Using @capgo/capacitor-transitions

Capacitor-transitionsを使用している場合 Using @capgo/capacitor-transitions Capacitor-transitionsを使用してネイティブメディアとインターフェイスの動作を計画している場合、Capacitor-transitionsと接続してください。 @capgo/capacitor-transitions Capacitor-トランジションの実装詳細については、@capgo/capacitor-トランジションを参照してください。 Getting Started Capacitor-トランジションの実装詳細については、Getting Startedを参照してください。 Capacitorライブアクティビティの使用方法については、@capgo/capacitor-ライブアクティビティを参照してください。 Capacitorライブアクティビティのネイティブ機能については、Using @capgo/capacitor-ライブアクティビティを参照してください。 @capgo/capacitor-ライブアクティビティ Capacitorライブアクティビティの実装詳細については、@capgo/capacitor-ライブアクティビティ、そして Capacitorビデオプレーヤーの使用方法については、Using @capgo/capacitor-ビデオプレーヤーを参照してください。 Capacitorビデオプレーヤーのネイティブ機能については、Using @capgo/capacitor-ビデオプレーヤーを参照してください。