Tour 引导

介绍

用于分步引导用户了解产品功能,支持目标区域高亮、气泡定位和自定义内容。

引入

import { Tour } from "@taroify/core"

代码演示

基础用法

通过 list 配置目标元素和引导内容。字符串类型的 target 会按元素 id 查找,也可以传入 React Ref。

import { useState } from "react"
import { Button, Cell, Tour } from "@taroify/core"

function BasicTour() {
  const [open, setOpen] = useState(false)

  return (
    <>
      <Cell title="功能引导">
        <Button id="tour-basic-target" size="small" onClick={() => setOpen(true)}>
          开始
        </Button>
      </Cell>
      <Tour
        open={open}
        type="tile"
        placement="bottom-end"
        list={[
          {
            target: "tour-basic-target",
            content: "点击这里可以开始体验新功能",
          },
        ]}
        onClose={() => setOpen(false)}
      />
    </>
  )
}

步骤引导

step 类型会展示当前进度和上一步、下一步、完成按钮。每一步都可以单独设置气泡位置。

const steps = [
  {
    target: "tour-step-1",
    content: "这里是首页入口",
  },
  {
    target: "tour-step-2",
    content: "在这里查看全部分类",
  },
  {
    target: "tour-step-3",
    content: "最后进入个人中心",
    placement: "top-end",
  },
]

<Tour
  open={open}
  title="功能介绍"
  list={steps}
  placement="top-start"
  onChange={(current) => console.log(current)}
  onClose={() => setOpen(false)}
/>

设置遮罩和偏移

offset 控制高亮区域相对于目标元素的纵向、横向扩展距离;popoverOffsetarrowOffset 可以单独调整每一步的气泡。

<Tour
  open={open}
  maskWidth={60}
  maskHeight={50}
  offset={[8, 8]}
  list={[
    {
      target: "tour-offset-target",
      content: "自定义高亮和气泡偏移",
      popoverOffset: [20, 16],
      arrowOffset: -20,
    },
  ]}
  onClose={() => setOpen(false)}
/>

自定义内容

传入 children 可以完全自定义气泡内容。

<Tour
  open={open}
  type="tile"
  list={[{ target: "tour-custom-target" }]}
  closeOnOverlayClick={false}
  onClose={() => setOpen(false)}
>
  <View className="custom-tour-content">
    <View>欢迎体验全新功能</View>
    <View onClick={() => setOpen(false)}>知道了</View>
  </View>
</Tour>

API

Props

参数说明类型默认值
defaultOpen默认是否展示引导booleanfalse
open是否展示引导booleanfalse
type引导类型step | tilestep
list引导步骤TourStep[][]
placement气泡位置TourPlacementbottom
offset高亮区域纵向、横向扩展距离[number, number][8, 10]
mask是否显示遮罩booleantrue
maskWidth高亮区域宽度number | string目标宽度
maskHeight高亮区域高度number | string目标高度
title标题,设置后同时展示关闭按钮ReactNode-
next下一步按钮内容ReactNode下一步
prev上一步按钮内容ReactNode上一步
complete完成按钮内容ReactNode完成
showPrev是否展示上一步按钮booleantrue
closeOnOverlayClick是否在点击遮罩后关闭booleantrue
lock是否禁止背景滚动booleantrue
children自定义气泡内容ReactNode-
onClose引导关闭时触发(opened, event) => void-
onChange切换步骤时触发(current) => void-

TourStep

参数说明类型默认值
target目标元素的 id、CSS 选择器、DOM 元素或 React RefTourTarget-
content引导内容ReactNode-
placement当前步骤的气泡位置TourPlacement-
popoverOffset气泡在交叉轴、主轴方向的偏移量[number, number][0, 12]
arrowOffset箭头在交叉轴方向的偏移量number0

TourPlacement

toptop-starttop-endbottombottom-startbottom-endleftleft-startleft-endrightright-startright-end

主题定制

样式变量

组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 ConfigProvider 组件。

名称默认值描述
--tour-z-index1100层级
--tour-mask-colorrgba(0, 0, 0, 0.7)遮罩颜色
--tour-mask-border-radiusvar(--border-radius-lg)高亮区域圆角
--tour-popover-min-width280px气泡最小宽度
--tour-popover-max-widthcalc(100vw - 64px)气泡最大宽度
--tour-popover-padding24px气泡内边距
--tour-popover-colorvar(--text-color)气泡文字颜色
--tour-popover-background-colorvar(--background-color-2)气泡背景色
--tour-popover-border-radiusvar(--border-radius-md)气泡圆角
--tour-popover-box-shadow0 8px 32px rgba(0, 0, 0, 0.12)气泡阴影
--tour-arrow-size12px箭头大小
--tour-content-font-sizevar(--font-size-md)内容字号
--tour-content-line-heightvar(--line-height-md)内容行高
--tour-footer-margin-top24px底部上边距
--tour-button-gap12px按钮间距
--tour-button-padding6px 16px按钮内边距
--tour-button-font-sizevar(--font-size-sm)按钮字号
--tour-button-border-radiusvar(--border-radius-sm)按钮圆角