快速入门
复制包含安装步骤和该插件完整 Markdown 指南的配置 prompt。
Set up this Capacitor plugin in the project.
Use the package manager already used by the project.
Install these package(s): `@capgo/capacitor-transitions`
Run the required Capacitor sync/update step after installation.
Read this markdown guide for the full setup steps: https://raw.githubusercontent.com/Cap-go/website/refs/heads/main/apps/docs/src/content/docs/docs/plugins/transitions/getting-started.mdx
Use that guide for platform-specific steps, native file edits, permissions, config changes, imports, and usage setup.
If that guide references other docs pages, read them too.
你可以使用我们的 AI 辅助设置来安装插件。使用以下命令将 Capgo skills 添加到你的 AI 工具中:
npx skills add https://github.com/Cap-go/capgo-skills --skill capacitor-plugins然后使用以下 prompt:
Use the `capacitor-plugins` skill from `Cap-go/capgo-skills` to install the `@capgo/capacitor-transitions` plugin in my project.如果你更想手动设置,请运行以下命令安装插件,并按照下方各平台的说明操作:
-
安装软件包
终端窗口 npm install @capgo/capacitor-transitions -
注册 Web Components
import '@capgo/capacitor-transitions'; -
包装路由页面
<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 配置
“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}> {/* Your router renders cap-page children here. */} </cap-router-outlet> );}
export function InboxPage() { const navigate = useNavigate(); const pageRef = useRef<HTMLElement>(null);
useEffect(() => { if (!pageRef.current) return;
return setupPage(pageRef.current, { onDidEnter: () => console.log('Inbox visible'), }); }, []);
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
“React JSX TypeScript”章节从以下路径导入 @capgo/capacitor-transitions/react 包含以下内容的 JSX 类型定义: cap-router-outlet, cap-page, cap-header, cap-content,以及 cap-footer。在大多数 React 项目中,该导入会自动使自定义元素在 TSX 中生效。
如果 TypeScript 仍然报错 Property 'cap-router-outlet' does not exist on type 'JSX.IntrinsicElements',请添加一个项目声明文件:
import '@capgo/capacitor-transitions/react';对于 Vite、Create React App 以及大多数 webpack React 应用,只需将该文件放入 src/ 即可。对于 Next.js,请将其放入 src/ 或项目根目录,并确保 tsconfig.json 包含了它:
{ "include": ["src", "src/capgo-transitions.d.ts"]}对于使用独立 types/ 文件夹的自定义 TypeScript 或 webpack 配置,请改为包含该文件夹:
{ "include": ["src", "types"]}通过 markup 启用或禁用 iOS 边缘手势:
<cap-router-outlet swipe-gesture="auto"></cap-router-outlet><cap-router-outlet swipe-gesture="true"></cap-router-outlet><cap-router-outlet swipe-gesture="false"></cap-router-outlet>或者通过 JavaScript:
const outlet = document.querySelector('cap-router-outlet');
outlet?.setSwipeGesture('auto');outlet?.setSwipeGesture(true);outlet?.setSwipeGesture(false);auto 仅在 Capacitor 报告为原生 iOS 运行时才启用手势。手势期间,页面转场跟随手指移动。用户松开时,转场要么完成并请求浏览器历史记录后退,要么取消并恢复当前页面。
若要阻止某个元素启动手势,请添加 data-swipe-gesture-ignore:
<button data-swipe-gesture-ignore>Open drawer</button>使用 Native Navigation
标题为“With Native Navigation”的章节使用 @capgo/capacitor-transitions 配合 @capgo/native-navigation 当原生层接管顶部和底部栏,而 Web 内容保持 Ionic 风格页面动效时使用。
-
安装并同步 Native Navigation 包:
终端窗口 npm install @capgo/native-navigationnpx cap sync -
配置原生界面外壳:
import { NativeNavigation } from '@capgo/native-navigation';await NativeNavigation.configure({contentInsetMode: 'css',});await NativeNavigation.setNavbar({title: 'Inbox',backButton: { visible: false },}); -
让 Web transition outlet 只负责页面:
<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);} -
用同一组路由事件驱动两个系统:
import { NativeNavigation } from '@capgo/native-navigation';import { setDirection } from '@capgo/capacitor-transitions/react';import { router } from './router';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-header>。让 @capgo/native-navigation 让该栏保持原生,并使用 @capgo/capacitor-transitions 来处理其下方的 WebView 页面内容。
组件
组件章节<cap-router-outlet>
标题为 “<cap-router-outlet>” 的章节| 属性 | 类型 | 默认 | 描述 |
|---|---|---|---|
platform | 'ios' | 'android' | 'auto' | 'auto' | 动画样式 |
duration | number | 平台默认值 | 动画持续时间(毫秒) |
keep-in-dom | boolean | true | 在 DOM 中保留非活跃页面 |
max-cached | number | 10 | 最大缓存页面数 |
swipe-gesture | boolean | 'auto' | 'auto' | 启用、禁用或通过原生检测 iOS 边缘手势 |
方法:
push(element, config?)pop(config?)setRoot(element, config?)setSwipeGesture(true | false | 'auto')
<cap-page>
标题为 “<cap-page>” 的章节包裹单个页面并触发生命周期事件:
cap-will-entercap-did-entercap-will-leavecap-did-leave
<cap-content>
标题为 “<cap-content>” 的章节| 属性 | 类型 | 默认 | 描述 |
|---|---|---|---|
fullscreen | boolean | false | 让内容在 header 后方滚动 |
scroll-x | boolean | true | 启用水平滚动 |
scroll-y | boolean | true | 启用垂直滚动 |
框架辅助函数
标题为“框架辅助函数”的章节各框架入口点都提供相同的核心辅助函数:
import { initTransitions, setDirection, setupPage, setupRouterOutlet } from '@capgo/capacitor-transitions/react';
initTransitions({ platform: 'auto' });setDirection('forward');setupRouterOutlet(element, { platform: 'auto', swipeGesture: 'auto' });setupPage(element, { onWillEnter, onDidEnter, onWillLeave, onDidLeave });可用入口点:
@capgo/capacitor-transitions/react@capgo/capacitor-transitions/vue@capgo/capacitor-transitions/angular@capgo/capacitor-transitions/svelte@capgo/capacitor-transitions/solid
从入门指南继续
“从入门指南继续”章节如果你正在使用 快速入门 要规划迁移和企业运营,请将其与 使用 @capgo/capacitor-transitions 用于在使用 @capgo/capacitor-transitions 时调用原生能力, Capgo 企业版 用于 Capgo Enterprise 中的产品工作流, Ionic Enterprise 插件替代方案 用于 Ionic Enterprise 插件替代方案的产品工作流, Capgo 替代方案 适用于 Capgo Alternatives 的产品工作流,以及 Capgo 咨询 适用于 Capgo Consulting 的产品工作流。