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

전환

아이오닉 스타일의 페이지 전환 및 iOS 에지 스와이프 백 가젯을 Ionic UI 없이 추가하세요.

데모

WebP 애니메이션 데모

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

소스 자산
Capacitor 스타일의 전후 방향 네비게이션 애니메이션
전환 흐름

안내

전환 튜토리얼

장치에서 테스트

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

전환 플러그인 미리보기 QRcode

@capgo/capacitor-transitions를 사용하면

@capgo/capacitor-transitions Capacitor 앱에 이온식 경로 전환을 추가합니다. 이온 UI를 채택하지 않고도 이온 스타일의 경로 전환을 Capacitor 앱에 추가할 수 있습니다. 이 플러그인은 웹层에서 작동하고 기존 라우터를 유지하며, iOS 에지 스와이프 백 전환을 자동으로 활성화할 수 있습니다. 이 기능은 Capacitor iOS에서만 작동합니다.

설치

npm install @capgo/capacitor-transitions

code 플러그인이 native 플러그인 code을 추가하지 않기 때문에 native 동기화 단계가 없습니다.

요소들을 등록하세요

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>

또한 JavaScript에서 강제로 사용할 수 있습니다:

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

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

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

네이티브 네비게이션과 함께 사용하십시오.

설치 @capgo/native-navigation __CAPGO_KEEP_0__이 네이티브 레이어가 navbar 또는 tabbar을 소유할 때:

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 animated page body와 네이티브 네비게이션 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);
}

네이티브 navbar을 움직이는 웹 헤더로 중복하지 마십시오. @capgo/native-navigation 바를 네이티브로 유지합니다. @capgo/capacitor-transitions 페이지 아래에 있는 콘텐츠를 애니메이션합니다.

전체 참조

Keep going from Using @capgo/capacitor-transitions

__CAPGO_KEEP_0__를 사용하여 native 미디어 및 인터페이스 동작을 계획하고 있습니다. Using @capgo/capacitor-transitions __CAPGO_KEEP_0__-transitions의 implementation detail을 참조하세요. @capgo/capacitor-transitions for the implementation detail in @capgo/capacitor-transitions, __CAPGO_KEEP_0__를 사용하여 시작하세요. Capacitor-전환을 위한 구현 세부 정보는 Getting Started에서 찾을 수 있습니다. 라이브 활동을 사용하는 @capgo/capacitor-live-activities Capacitor-전환을 위한 내장 기능은 Using @capgo/capacitor-live-activities에서 찾을 수 있습니다. @capgo/capacitor-live-activities Capacitor-전환을 위한 구현 세부 정보는 @capgo/capacitor-live-activities에서 찾을 수 있으며 라이브 활동을 사용하는 @capgo/capacitor-video-player Capacitor-전환을 위한 내장 기능은 Using @capgo/capacitor-video-player에서 찾을 수 있습니다.