본문으로 바로가기
Back to plugins
@capgo/capacitor-transitions
튜토리얼
@capgo/capacitor-transitions

전환

아이오닉 스타일 페이지 전환 및 iOS 에지 스와이프 백 게스트를 아이오닉 UI 없이 추가합니다.

데모

Animated WebP 데모

Capacitor 스타일 iOS 전환 애니메이션을 보여주는 React 라우터 흐름

소스 자산
Capacitor 스타일 전환 애니메이션을 보여주는 React 페이지 전환 데모
React 전환 흐름

가이드

전환 튜토리얼

__CAPGO_KEEP_0__

Download the Capgo app, then scan the QR code.

code

Using @capgo/capacitor-transitions

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

__CAPGO_KEEP_0__

npm install @capgo/capacitor-transitions

code

__CAPGO_KEEP_0__을 등록하세요.

import '@capgo/capacitor-transitions';

__CAPGO_KEEP_0__을 wrapping

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

__CAPGO_KEEP_0__을 라우터에 연결하세요.

정상적인 라우트 업데이트하기 전에 전환 방향을 설정하세요.:

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 subpath는 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" iOS 네이티브 런타임이 보고할 때만 제스처를 활성화하십시오: Capacitor

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

또한 자바스크립트에서 강제로 사용할 수 있습니다:

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

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

제스처는 손가락이 이동하는 동안 따라가고, 사용자가 손가락을 놓을 때 완료되거나 취소됩니다. 추가 data-swipe-gesture-ignore 버튼, 슬라이더, 또는 드로어에 제스처를 시작하지 않도록 하려면:

네이티브 네비게이션과 함께 사용:

네이티브 레이어가 네비게이션 바 또는 탭 바를 소유할 때 사용: @capgo/native-navigation 네이티브 크롬을 구성한 후 WebView 페이지에 대한 전환을 유지하세요:

npm install @capgo/native-navigation
npx cap sync

animated page body와 네이티브 네비게이션 CSS 변수를 사용하여 insets:

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 바를 네이티브로 유지하세요.

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

Install @capgo/native-navigation Configure @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와 연결하세요. __CAPGO_KEEP_0__ 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.