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

トランジション

Ionic UI を使用せずに Ionic スタイルのページ トランジションと iOS エッジ スワイプ バック ゲストを追加します。

デモ

WebPアニメーション

CapacitorのiOSスタイルのページ遷移を示すReactルーターフローのWebPアニメーション

ソースアセット
Capacitorスタイルのシェル内で前後ナビゲーションを示すReactページ遷移のアニメーション
Reactの遷移フロー

ガイド

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

デバイスでテスト

ダウンロードした Capgo アプリを起動し、QRコードの code をスキャンしてください。

トランジション プラグイン プレビュー QR code

@capgo/capacitor-transitions を使用すると

@capgo/capacitor-transitions Capacitor アプリにIonicスタイルのルート トランジションを追加します。Ionic UIを採用することなく、Capacitor アプリにIonicスタイルのルート トランジションを追加します。Web層で実行し、既存のルーターを維持し、iOSエッジ スワイプ バック ゲストを自動的に有効にすることができます。ただし、これはネイティブ 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" to enable the gesture only when Capacitor reports a native iOS runtime:

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

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

フルリファレンス

capgoを使用して、@capgo/capacitor-transitionsから続けてください。

__CAPGO_KEEP_0__を使用している場合 @capgo/capacitor-transitionsを使用して、ネイティブのメディアとインターフェイスの動作を計画します。 __CAPGO_KEEP_0__/__CAPGO_KEEP_1__-transitionsと接続して、ネイティブのメディアとインターフェイスの動作を計画します。 capgo/capacitor-transitionsの実装詳細については、@capgo/capacitor-transitionsを参照してください。 for the implementation detail in @capgo/capacitor-transitions, ネイティブのメディアとインターフェイスの動作を計画するには、@__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-transitionsを使用します。 For the implementation detail in Getting Started, Using @capgo/capacitor-live-activities For the native capability in Using @capgo/capacitor-live-activities, @capgo/capacitor-live-activities For the implementation detail in @capgo/capacitor-live-activities, and Using @capgo/capacitor-video-player For the native capability in Using @capgo/capacitor-video-player.