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

ネイティブナビゲーション

フルスクリーンのCapacitor WebView上でネイティブのナビゲーションバー、タブバー、トランジションシェルをレンダリングする

デモ

WebPアニメーション

ネイティブナビゲーションチーム、タブの選択、SVGアイコン、スタイリングオプションをWebPアニメーションで表示

ソースアセット
ネイティブシェル
ネイティブナビゲーションタップフロー、タブの選択、プッシュトランジション、ネイティブバックをアニメーション化
タップフロー
Native navigation chrome, tab selection, SVG icons, and styling options rendered as animated WebP demos.
アニメーション用のネイティブSVGアイコンのデモ
SVGアイコン
アニメーション用のネイティブナビゲーションオプションのデモ
スタイリングオプション

ガイド

ネイティブナビゲーションのチュートリアル

デバイスでテスト

Download the Capgo app, then scan the QR code.

ネイティブナビゲーションプラグインプレビューQRcode

capgo/capacitor-ネイティブナビゲーションを使用

@capgo/capacitor-native-navigation ネイティブトップナビゲーション、ボトムタブクローム、ルートトランジションシェルを1つのフルスクリーンCapacitor WebView上にレンダリングします。ウェブフレームワークはルートとコンテンツを管理し、ネイティブはアプリフレームを管理します。

インストールと同期

npm install @capgo/capacitor-native-navigation
npx cap sync

ネイティブフレームの設定

import { NativeNavigation } from '@capgo/capacitor-native-navigation';

await NativeNavigation.configure({
  contentInsetMode: 'css',
  animationDuration: 360,
  colors: {
    tint: '#0f172a',
    inactiveTint: '#64748b',
  },
});

ネイティブナビゲーションバーのレンダリング

await NativeNavigation.setNavbar({
  title: 'Inbox',
  subtitle: 'Native chrome',
  transparent: true,
  backButton: { visible: false },
  rightItems: [
    {
      id: 'compose',
      title: 'Compose',
      icon: {
        svg: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 20h9"/><path d="M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4Z"/></svg>',
      },
    },
  ],
});

ネイティブタブバーのレンダリング

await NativeNavigation.setTabbar({
  selectedId: 'inbox',
  labelVisibilityMode: 'selected',
  icons: true,
  colors: {
    dynamic: true,
    tint: '#0f172a',
    inactiveTint: '#64748b',
  },
  tabs: [
    {
      id: 'inbox',
      title: 'Inbox',
      icon: {
        svg: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 4h16v16H4z"/><path d="m4 13 4 4h8l4-4"/></svg>',
      },
    },
    {
      id: 'search',
      title: 'Search',
      icon: {
        svg: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="7"/><path d="m20 20-3-3"/></svg>',
      },
    },
  ],
});

ネイティブイベントをルーターに接続

ネイティブバーは意図を発信します。ルーターはルート変更を実行します:

await NativeNavigation.addListener('navbarBack', () => {
  router.back();
});

await NativeNavigation.addListener('navbarItemTap', ({ id }) => {
  if (id === 'compose') router.push('/compose');
});

await NativeNavigation.addListener('tabSelect', ({ id }) => {
  router.push(`/${id}`);
});

ルート変更のアニメーション

トランジショントランザクションを使用して通常のウェブルート更新を囲みます:

const transition = await NativeNavigation.beginTransition({
  direction: 'forward',
});

router.push('/message/42');
await router.ready?.();

await NativeNavigation.setNavbar({
  title: 'Message',
  backButton: { visible: true, title: 'Inbox' },
});

await NativeNavigation.finishTransition({
  id: transition.id,
  direction: 'forward',
});

ズーム トランジションを追加

カード、グリッド アイテム、またはメディア プレビューから開くルートの場合、ズーム ヘルパーを使用してください。

import { beginZoomTransition, finishZoomTransition } from '@capgo/capacitor-native-navigation';

const card = document.querySelector('[data-message-card]');
if (card) {
  const transition = await beginZoomTransition(card, { cornerRadius: 18 });

  router.push('/message/42');
  await router.ready?.();

  await NativeNavigation.setNavbar({
    title: 'Message',
    backButton: { visible: true, title: 'Inbox' },
  });

  await finishZoomTransition(undefined, {
    id: transition.id,
    cornerRadius: 18,
  });
}

ネイティブ インセットでコンテンツを埋めます

場合 contentInsetModecss, プラグインはネイティブ バーのCSS 変数を書き出します:

.page {
  padding-top: var(--cap-native-navigation-top);
  padding-bottom: var(--cap-native-navigation-bottom);
}

アイコンの選択肢

アイコンは、ReactまたはVueノードではありません。ネイティブ アセットをバンドルしない場合、SVGを使用してください:

const icon = {
  svg: '<svg viewBox="0 0 24 24"><path d="M3 10.5 12 3l9 7.5"/></svg>',
  template: true,
  ios: { sfSymbol: 'house.fill' },
  android: { resource: 'ic_menu_view' },
};

インライン SVGは path, line, polyline, polygon, circle, rect

Combine with @capgo/capacitor-transitions

Nativeナビゲーションを使用して、ネイティブのナビゲーションバー、タブバー、セーフエリアのインセット、ネイティブのイベントを使用します。 @capgo/capacitor-transitions ウェブビューのページスタックの下にあるネイティブのchromeのために

npm install @capgo/capacitor-native-navigation @capgo/capacitor-transitions
npx cap sync

両方のパッケージを一度に初期化します。

import { NativeNavigation } from '@capgo/capacitor-native-navigation';
import '@capgo/capacitor-transitions';
import { initTransitions, setupRouterOutlet, setDirection } from '@capgo/capacitor-transitions/react';

initTransitions({ platform: 'auto' });

const outlet = document.querySelector('cap-router-outlet');
if (outlet) {
  setupRouterOutlet(outlet, { platform: 'auto', swipeGesture: 'auto' });
}

await NativeNavigation.configure({
  contentInsetMode: 'css',
});

ページのトランジションアウトレットを、ウェブバーの複製に焦点を当てるのではなく、保持します。

<cap-router-outlet platform="auto" swipe-gesture="auto">
  <cap-page>
    <cap-content slot="content" fullscreen>
      <main class="page">Inbox content</main>
    </cap-content>
  </cap-page>
</cap-router-outlet>

両方のパッケージを同じルーター アクションからドライブします。

async function openMessage(id: string) {
  setDirection('forward');
  await router.push(`/messages/${id}`);
  await NativeNavigation.setNavbar({
    title: 'Message',
    backButton: { visible: true, title: 'Inbox' },
  });
}

await NativeNavigation.addListener('navbarBack', () => {
  setDirection('back');
  router.back();
});

await NativeNavigation.addListener('tabSelect', ({ id }) => {
  setDirection('root');
  router.push(`/${id}`);
});

ルート変更ごとに、1 つのアニメーションレイヤーを選択します。通常のページのプッシュをアニメーション化し、共有要素またはズーム ルートのためにのみ、Native Navigationのズーム ヘルパーを使用します。 @capgo/capacitor-transitions フル リファレンス

__CAPGO_KEEP_0__:

Keep going from Using @capgo/capacitor-native-navigation

Capacitor Native Navigationを使用している場合 Using @capgo/capacitor-native-navigation Capacitor Native Navigationを接続 @capgo/capacitor-native-navigation for the implementation detail in @capgo/capacitor-native-navigation, Capacitor Native Navigationの実装詳細 Capacitor Live Activitiesを使用 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.