메인 콘텐츠로 건너뛰기
플러그인으로 돌아가기
@capgo/capacitor-transitions
튜토리얼
@capgo/capacitor-transitions

전환

아이온 스타일 페이지 전환 및 iOS 에지 스와이프 백 가젯을 아이온 UI 없이 추가합니다.

데모

웹P 애니메이션 데모

iOS 스타일 Capacitor 페이지 전환 애니메이션

소스 자산
Capacitor 스타일 전환 애니메이션 데모
React 전환 흐름

안내

전환에 대한 튜토리얼

장치에서 테스트

Capgo 앱을 다운로드하고 QR코드 code를 스캔하세요.

전환 플러그인 미리보기 QR코드 code

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

설치

npm install @capgo/capacitor-transitions

자연 동기화 단계가 없는데, 패키지는 code라는 네이티브 플러그인을 추가하지 않습니다.

요소 등록

import '@capgo/capacitor-transitions';

페이지 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>

라우터와 연결

전환 방향을 정의하기 전에 일반 라우트 업데이트하기:

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

<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 네이티브 레이어가 네비게이션 바 또는 탭 바를 소유할 때:

npm install @capgo/native-navigation
npx cap sync

네이티브 크롬을 구성하고 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 변수를 사용하여 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);
}

원본 네비게이션 바를 웹 헤더로 복제하지 마십시오. @capgo/native-navigation 바를 원본으로 유지합니다. @capgo/capacitor-transitions 바 아래쪽의 페이지 콘텐츠를 애니메이션합니다.

전체 참조

Keep going from Using @capgo/capacitor-transitions

이미 @__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-transitions를 사용하고 계신가요? @capgo/capacitor-transitions와 연결하여 native 미디어 및 인터페이스 동작을 계획하세요. native 미디어 및 인터페이스 동작을 계획하기 위해 @__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-transitions와 연결하세요. https://capgo.com/Cap-go/capacitor-transitions for the implementation detail in @capgo/capacitor-transitions, 시작하기 Capacitor-__CAPGO_KEEP_0__-transitions 구현 세부 정보 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.