Skip to content

组件说明

PocketSlide 提供三个核心组件:SlidesViewer、CoverSlide 和 ContentSlide。

目录结构

src/modules/slides/
├── components/
│   ├── SlidesViewer.tsx  - 幻灯片查看器容器
│   ├── CoverSlide.tsx    - 封面幻灯片组件
│   ├── ContentSlide.tsx - 内容幻灯片组件
│   └── Logo.tsx          - Logo 组件
└── example/              - 示例目录

SlidesViewer

幻灯片查看器组件,用于包裹所有幻灯片页面,是整个演示文稿的容器。

基本用法

tsx
import SlidesViewer from '@/modules/slides/components/SlidesViewer';
import CoverSlide from './CoverSlide';
import ContentSlide from './ContentSlide';

export default function Index() {
  return (
    <SlidesViewer>
      <CoverSlide title="封面标题" subtitle="副标题" />
      <ContentSlide title="第一页">
        <p>内容...</p>
      </ContentSlide>
      <ContentSlide title="第二页">
        <p>更多内容...</p>
      </ContentSlide>
    </SlidesViewer>
  );
}

Props

属性类型默认值说明
childrenReact.ReactNode[]-幻灯片内容数组
classNamestring-自定义样式类
showNavigationbooleantrue是否显示导航按钮
onSlideChange(index: number) => void-翻页回调函数
backgroundImagestring-全局背景图片 URL
backgroundOpacitynumber50背景透明度,0-100
backgroundBlurnumber0背景模糊程度,单位 px
logoSrcstring/logo.svgLogo 图片路径

全局背景设置

通过 SlidesViewer 设置的背景会被所有幻灯片继承:

tsx
<SlidesViewer
  backgroundImage="https://example.com/bg.jpg"
  backgroundOpacity={20}
  backgroundBlur={4}
>
  <YourSlide />
</SlidesViewer>

Logo 设置

通过 logoSrc 属性统一设置所有幻灯片的 logo:

tsx
<SlidesViewer logoSrc="/custom-logo.svg">
  <YourSlide />
</SlidesViewer>

CoverSlide

封面幻灯片组件,适用于标题页、首页、尾页等场景。

基本用法

tsx
import CoverSlide from '@/modules/slides/components/CoverSlide';

<CoverSlide
  title="幻灯片标题"
  subtitle="副标题"
  author="作者"
  date={new Date().toLocaleDateString()}
/>

完整示例

tsx
import CoverSlide from '@/modules/slides/components/CoverSlide';

export default function MyCover() {
  return (
    <CoverSlide
      title="吉林省应急管理"
      subtitle="智慧应急 科技赋能"
      author="应急管理厅"
      date={new Date()}
      backgroundImage="https://images.unsplash.com/photo-1516321318423-f06f85e504b3?w=1920&q=80"
      backgroundOpacity={20}
    />
  );
}

Props

属性类型说明
titlestring主标题
subtitlestring副标题
authorstring作者
datestring日期
classNamestring自定义样式类
backgroundImagestring背景图片 URL
backgroundOpacitynumber背景透明度,0-100,默认 50
backgroundBlurnumber背景模糊程度,单位 px,默认 0

ContentSlide

内容幻灯片组件,适用于正文页,支持任意 React 内容。

基本用法

tsx
import ContentSlide from '@/modules/slides/components/ContentSlide';

<ContentSlide title="页面标题">
  <div className="space-y-4">
    <h3>内容标题</h3>
    <p>这里是具体内容...</p>
  </div>
</ContentSlide>

完整示例

tsx
import ContentSlide from '@/modules/slides/components/ContentSlide';

export default function MyContent() {
  return (
    <ContentSlide title="项目成果">
      <div className="grid grid-cols-3 gap-4">
        <div className="p-4 rounded-lg border bg-card">
          <h4>成果一</h4>
          <p>成果描述</p>
        </div>
        <div className="p-4 rounded-lg border bg-card">
          <h4>成果二</h4>
          <p>成果描述</p>
        </div>
        <div className="p-4 rounded-lg border bg-card">
          <h4>成果三</h4>
          <p>成果描述</p>
        </div>
      </div>
    </ContentSlide>
  );
}

Props

属性类型说明
titlestring页面标题
childrenReact.ReactNode内容区域
classNamestring自定义样式类
backgroundImagestring背景图片 URL
backgroundOpacitynumber背景透明度,0-100,默认 50
backgroundBlurnumber背景模糊程度,单位 px,默认 0

Logo 组件

Logo 组件用于在幻灯片中显示品牌标识。

组件位置

src/modules/slides/components/Logo.tsx

基本用法

tsx
import Logo from '@/modules/slides/components/Logo';

// 默认用法
<Logo />

// 自定义样式
<Logo className="w-12 h-12" />

// 自定义图片
<Logo src="/custom-logo.png" />

Props

属性类型说明
classNamestring自定义样式(如位置、大小)
srcstringlogo 图片路径(可选)

Context 机制

SlidesViewer 使用 React Context 提供 logoSrc,CoverSlide 和 ContentSlide 通过 useLogoSrc() hook 获取值。如果在 SlidesViewer 中设置了 logoSrc,则会覆盖 Logo 组件的默认 src。

组合使用示例

tsx
import SlidesViewer from '@/modules/slides/components/SlidesViewer';
import CoverSlide from '@/modules/slides/components/CoverSlide';
import ContentSlide from '@/modules/slides/components/ContentSlide';
import MySlide1 from './MySlide1';
import MySlide2 from './MySlide2';

export default function MyPresentation() {
  return (
    <SlidesViewer
      backgroundImage="https://images.unsplash.com/photo-1557682250-33bd709cbe85?w=1920&q=80"
      backgroundOpacity={10}
      logoSrc="/logo.svg"
    >
      <CoverSlide
        title="我的演示"
        subtitle="这是一个示例"
        author="作者"
        date={new Date().toLocaleDateString()}
      />
      <ContentSlide title="第一页">
        <p>内容...</p>
      </ContentSlide>
      <MySlide1 />
      <MySlide2 />
    </SlidesViewer>
  );
}